opencv中的图像亮度变换(图像增强)

#include <opencv.hpp>  
  
using namespace cv;  
using namespace std;  

int imageAdjust(Mat &src, Mat &dst,
	double low_in, double high_in,
	double low_out, double high_out,
	double gamma) {
	if (low_in < 0 && low_in >1 && high_in <0 && high_in >1
		&& low_out < 0 && low_out > 1 && high_out < 0 && high_out > 1
		&& low_out > high_out)
		return -1;

	double low2 = low_in * 255;
	double high2 = high_in * 255;
	double bottom2 = low_out * 255;
	double top2 = high_out * 255;
	double err_in = high2 - low2;
	double err_out = top2 - bottom2;

	int x, y;
	double val;
	uchar* p;

	//亮度变换  
	for (y = 0; y < src.rows; y++)
	{
		p = src.ptr<uchar>(y);  //行指针  
		for (x = 0; x < src.cols; x++)
		{
			val = pow((p[x] - low2) / err_in, gamma)*err_out + bottom2;
			if (val > 255)  val = 255;
			if (val < 0)    val = 0;

			dst.at<uchar>(y, x) = (uchar)val;
		}
	}
}

int main(int argc, char* argv[])  
{  
    Mat src;  
  
    src = imread("22.jpg",0);  
  
    if(src.data == NULL)  
    {  
        cout << "read image failed" << endl;  
        return -1;  
    }  
  
    imshow("rice【源图像】",src);  
  
    Mat dst = src.clone();  
      
    //图像亮度变换  
    imageAdjust(src,dst,0,0.5,0.5,1,1);  
  
    imshow("亮度变换后的图",dst);  
  
    waitKey(0);  
 
    return 0;  
}  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值