您的位置:首页 > 运维架构

opencv使图片变亮

2017-09-28 19:56 127 查看

1.改变图片的对比度和亮度

int text1(){
double alpha; //对比度
int beta;     //亮度
Mat image = imread("C://Users//Lenovo//Desktop//IMG//图像增强.png");

/// 目标图像空间预分配
Mat new_image = Mat::zeros(image.size(), image.type());

/// 输入初始化值
cout << "请输入对比度1-3: ";
cin >> alpha;
cout << "请输入亮度1-100: ";
cin >> beta;
/// 执行变换 new_image(i,j) = alpha    * image(i,j) + beta
for (int y = 0; y < image.rows; y++)
{
for (int x = 0; x < image.cols; x++)
{
for (int c = 0; c < 3; c++)
{
new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha * (image.at<Vec3b>(y, x)[c]) + beta);
}
}
}

/// 显示图像
imshow("原图像", image);
imshow("新图像", new_image);

/// 等待键盘事件
waitKey();

cin.get();
return 0;
}

2.伽马算法

伽马变换:在图像处理中,将漂白(相机过曝)的图片或者过暗(曝光不足)的图片,进行修正!

伽马变换的基本形式如下:



曲线图如下:



通过以上曲线图:

         

                 gamma值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分

                  gamma值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分

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 text2()
{
Mat src;

src = imread("C://Users//Lenovo//Desktop//IMG//图像增强.png", 0);

if (src.data == NULL)
{
cout << "未找到该图片!" << endl;
return -1;
}

imshow("原图像", src);

Mat dst = src.clone();

//图像亮度变换
imageAdjust(src, dst, 0, 0.5, 0.5, 1, 1);

imshow("新图像", dst);

waitKey(0);

return 0;
}
伽马变换的图片失去了彩色效果,变为了黑白图片由暗变亮

参考博客:http://blog.csdn.net/gone_huilin/article/details/53433836

                    http://www.cnblogs.com/MakeView660/p/6513589.html  

                    http://blog.csdn.net/yangleo1987/article/details/52912560
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv 图像增强