通过掩膜来实现图像对比度的提升

通过掩膜实现图像对比度的提升
  1. 通过掩膜实现图像对比度提升
  2. 通过api实现图像的对比度提升
1、通过掩膜实现图像对比度提升

示例图像:
示例图像

结果图像:
结果图像
掩膜的大小:
掩膜的大小

代码实现:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	//读取图像
	Mat img = imread("G:/imgtest/label.png");
	if (!img.data)
	{
		printf("this image cannot load");
		return -1;
	}
	//显示图像
	namedWindow("img", WINDOW_AUTOSIZE); //namedWindow创建的窗口,可以自动销毁
	imshow("img", img);
	
	//图像位深度
	CV_Assert(img.depth() == CV_8U);
	Mat resultimg = Mat::zeros(img.size(), img.type());
	int nchannels = img.channels();
	int rows = img.rows;
	int cols = (img.cols - 1) * nchannels;
	
	//行
	for (int row = 1; row < rows-1; row++)
	{
		const uchar* previous = img.ptr<uchar>(row-1); //对应5上面的一行
		const uchar* current = img.ptr<uchar>(row); //5所在的行
		const uchar* next = img.ptr<uchar>(row+1); //5下面的一行
		uchar* outputimg = resultimg.ptr<uchar>(row);
		//列
		for (int col = nchannels; col < cols-1; col++)
		{
			//根据上图公式计算掩膜
			//saturate_cast用于确保图像的像素在0-255之间
			outputimg[col] = saturate_cast(5*current[col] - (previous[col] + next[col] + current[col-nchannels] + current[col+nchannels]));
		}
	}
	
	//显示结果图像
	namedWindow("output", WINDOW_AUTOSIZE);
	imshow("output", resultimg);
	//保存图像
	imwrite("G:/testimg/result.png", resultimg);

	waitKey(0);
	return 0;
	
	
}
2、通过OpenCV自带api进行对比度的提升

主要用到一下api:
filter2D(src, dst, src.depth(), kernel)
一个重要的函数:
saturate_cast():确保图像像素在0-255之间。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	//读取图像
	Mat img = imread("G:/imgtest/label.png");
	if (!img.data)
	{
		printf("this image cannot load");
		return -1;
	}
	//显示图像
	namedWindow("img", WINDOW_AUTOSIZE); //namedWindow创建的窗口,可以自动销毁
	imshow("img", img);
	
	//图像位深度
	CV_Assert(img.depth() == CV_8U);
	Mat resultimg = Mat::zeros(img.size(), img.type());

	//设置kernel,即为上图的3*3方块
	Mat kernel = (Mat_<char>(3,3) << 0,-1,0,-1,5,-1,0,-1,0);
	filter2D(img, resultimg, img.depth(), kernel);
	imwrite("G:/testimg/reult.png", resultimg);
	waitKey(0);
	return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值