头文件
头文件主要包含我们需要的环境,以及一些宏定义和命名空间的设置,以及最关键的类或者函数的定义:
#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的同一个路径下。