#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;
}
opencv中的图像亮度变换(图像增强)
最新推荐文章于 2024-08-14 08:00:00 发布