c++实现图像增强并封装代码

c++实现图像增强并封装

头文件

头文件主要包含我们需要的环境,以及一些宏定义和命名空间的设置,以及最关键的类或者函数的定义:

#pragma once
#include <iostream>
#include <opencv2/opencv.hpp>
#include<crtdbg.h>
#ifndef SCREEN_XY
#define SCREEN_XY(x, y)  (255 - ((255 - (x))*(255 - (y)) >> 8))
#endif

using namespace std;
using namespace cv;


#define BLUE 	0
#define GREEN	1
#define RED 	2
#define NUMCLASS 100

cv::Mat clahe(cv::Mat input, int limit, int size);

cv::Mat DarkLightPhotoshop(cv::Mat src);

void Strengthen(cv::String images_path, cv::String out_path);


源文件

源文件的主要内容是,包含我们的头文件名称,实现我们在头文件中申明的类或者函数的详细代码:

#include "strengthen.h"

cv::Mat clahe(cv::Mat input, int limit, int size)
{
    
    
	cv::Mat img = input.clone();//imread(filenames[i]);
	// clahe
	cv::Mat clahe_b;


	cv::Ptr<CLAHE> clahe = cv::createCLAHE();
	clahe->setClipLimit(limit);
	clahe->setTilesGridSize(cv::Size(size, size));
	clahe->apply(img, clahe_b);
	return clahe_b;

}


cv::Mat DarkLightPhotoshop(Mat src)
{
    
    
	//char *imgfile = ".\\testdata\\1908182010-5065-1-373_20131.jpg";
	//Mat src = imread(imgfile, CV_LOAD_IMAGE_COLOR);
	//imshow("src", src);
	//Mat dst;
	//cvtColor(src, dst, COLOR_GRAY2BGR);
	int size = src.cols * src.rows;
	uchar r = 0, g = 0, b = 0, g_alpha = 0;
	uchar* pSrcData = src.data;
	for (int i = 0; i < size; i++, pSrcData += 3)
	{
    
    
		g_alpha = 255 - pSrcData[GREEN];
		b = pSrcData[BLUE] * g_alpha >> 8;//8
		g = pSrcData[GREEN] * g_alpha >> 8; //8
		r = pSrcData[RED] * g_alpha >> 8;//8
		pSrcData[BLUE] = SCREEN_XY(pSrcData[BLUE], b);
		pSrcData[GREEN] = SCREEN_XY(pSrcData[GREEN], g);
		pSrcData[RED] = SCREEN_XY(pSrcData[RED], r);
	}

	cout << " " << endl;
	return src;
}

void Strengthen(cv::String images_path, cv::String out_path)
{
    
    
	vector<cv::String> fn;
	cv::String image_path = images_path + "/*.jpg";
	cv::glob(image_path, fn, false);
	for (int i = 0; i < fn.size(); i++)
	{
    
    
		cv::Mat frame = cv::imread(fn[i]);
		//降采样
		cv::pyrDown(frame, frame);
		if (frame.empty())
		{
    
    
			cout << "请确认图像路径!" << endl;
			break;
		}

		cv::Mat img_b, img_g, img_r;
		vector<cv::Mat> img_RGB;
		cv::split(frame, img_RGB);

		img_b = img_RGB[0];
		img_g = img_RGB[1];
		img_r = img_RGB[2];

		cv::Mat frame_enhance_b;
		frame_enhance_b = clahe(img_b, 8, 15);

		cv::imwrite(out_path + "\\" + to_string(i) + ".png", frame_enhance_b);
		cout << "第" << i << "张图像增强完毕" << endl;
	}
	cout << "所有图像增强完毕" << endl;

}

主函数

主函数主要实现的就是软件的功能,为我们调用的函数进行传参,并按照主函数的逻辑执行程序:

#include <iostream>
#include "strengthen.h"

int main()
{
    
    
	cv::String image_path;
	cv::String out_path;
	cout << "请输入图像文件夹所在路径:";
	cin >> image_path;
	cout << endl;
	cout << "请输入增强图像的保存路径:";
	cin >> out_path;

	Strengthen(image_path, out_path);
	system("pause");
}

项目设置

选择“项目”,选择最下方的属性,选择常规,选择配置类型为“应用程序exe”:
在这里插入图片描述
选择高级,输入目标文件扩展名为“.exe”:
在这里插入图片描述
最后选择应用并确定。

然后点击上方的生成,点击生成解决方案(或者重新生成解决方案),就会在我们对应的配置下生成方案:
在这里插入图片描述
在这里插入图片描述
点击exe运行程序即可。

注意事项

如果需要在其他得电脑上运行,需要我们在配置环境得时候将路径设置为相对路径,然后将环境依赖得dll文件放在exe的同一个路径下。

猜你喜欢

转载自blog.csdn.net/ycx_ccc/article/details/132203294