改变图像对比度和亮度的两个函数

改变图像对比度和亮度的两个函数:
srcImg.cv::convertTo(dstImg,-1,alpha,beta) // 直方图平移:f(i,j)=a*f(i,j) + b;

gamaT() // 首先构造一个查询表,i的取值0-255。每个像素取对应的r校正值LUT[i];遍历图相,将每个像素的值按照方程式变换,也就是查询像素值对应的LUT值,然后替换。

gamaT函数如下:
在这里插入图片描述
参考网址:

https://docs.opencv.org/master/d3/dc1/tutorial_basic_linear_transform.html

展示结果

第一张原始图,第二张srcImg.cv::convertTo(dstImg,-1,1.1,30),第三张gama校正,r=0.8;

源代码:GamaT.cpp

#include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <cmath>
#include "GamaT.h"

using namespace cv;
using namespace std;

Mat GamaT(Mat &srcImg, float kFactor)
{
	unsigned char LUT[256];
	for (int i = 0; i < 256; i++)
	{
		// 构造一个查询表,i的取值0-255。每个像素取对应的r校正值。
		float f = i / 255.0f;
		f = (float)pow(f, kFactor);
		LUT[i] = saturate_cast<uchar>(f*255.0f);
	}
	Mat rImg1;
	Mat rImg2 = srcImg.clone();

	// 方法一:直方图平移:f(i,j)=a*f(i,j) + b;
	//srcImg.convertTo(rImg1, -1, 1.1, 30);
	//imshow("converTo", rImg1);

	// gamaT校正,调节kFactor,在调节明度和对比度的同时最大限度的保留图像细节。
	if (srcImg.channels() == 1)
	{
		MatIterator_<uchar> iterator = rImg2.begin<uchar>();
		MatIterator_<uchar> iteratorend = rImg1.end<uchar>();
		for (; iterator != iterator; iterator++)
		{
			//像素范围是有限的0-255,像素个数时rows X cols.
			*iterator = LUT[*iterator];	//当遇到每一个像素时,直接查表,速度更快。
		}
	}
	else
	{
		MatIterator_<Vec3b> iterator = rImg2.begin<Vec3b>();
		MatIterator_<Vec3b> iteratorend = rImg1.end<Vec3b>();
		for (; iterator != iteratorend; iterator++)
		{
			(*iterator)[0] = LUT[((*iterator))[0]];	//blue
			(*iterator)[1] = LUT[((*iterator))[1]];	//green
			(*iterator)[2] = LUT[((*iterator))[2]];	//red
		}
	}
	imshow("r", rImg2);
	waitKey();
	return rImg2;
}

最后,感谢博主 零钱币:

https://blog.csdn.net/linqianbi/article/details/78617615

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柏常青

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值