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的同一个路径下。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澄鑫

谢谢,将继续努力提供技术方案

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值