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从视频中获取图片并保存
- 对图片上的网格纹进行处理(jpg格式),OpenCV2.4.9,C++,FFT
- 【OpenCV学习】Kmean均值聚类对图片进行减色处理
- Qt+opencv 读取图片
- Android OpenCV实现图片叠加,水印
- opencv 图片的离散傅里叶变换DFT
- Opencv3图片旋转(仿射变换)
- [转]OpenCV两张图片的合并
- 用OpenCV保存处理的图片
- opencv读取视频并保存为图片
- directshow+opencv显示usb的摄像头代码(并保存视频中的图片)
- 使用opencv创建一张纯黑色的图片与其他图片进行合成
- Python+Opencv进行识别相似图片
- OpenCV基础篇之图片叠加
- OpenCV学习笔记04--图片和视频的保存
- android端基于openCV给图片打马赛克
- opencv 常用图片操作函数备忘
- 在标准window窗口下,显示opencv处理过的图片
- opencv: 旋转图片
- qt5.1+ vs2013+opencv2.4.8制作视频图片读取界面