opencv中的图像亮度变换(图像增强)
来源:互联网 发布:流体计算软件app 编辑:程序博客网 时间:2024/05/29 18:52
项目中遇到了图像对比度不强的图像,于是想通过对图像进行亮度变换以达到预期的图像,于是研究了一下图像的亮度变换。其实,之前在matlab中也碰到过,在冈萨雷斯的《数字图像处理(matlab版)》第47页,有对亮度变换函数imadjust进行了讲解。当然啦,也可以直接通过matlab的help,查看imadjust的用法:
J = imadjust(I)J = imadjust(I,[low_in; high_in],[low_out; high_out])J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)RGB2 = imadjust(RGB1,...)
需要注意的是:low_in,high_in,low_out, high_out都在[0,1]之间,并且low_in 必须要小于high_in的,但是low_out 则可以大于high_out,这相当于对图像进行了反转。gamma不写的时候,默认是1,且当gamma小于1的时候趋向更亮;当gamma大于1的时候趋向于更暗。
下面我们直接上代码:
>> I = imread('rice.tif');>> J = imadjust(I,[0,0.5],[0.5,1]);>> imshow(I)>> figure,imshow(J)>>效果图:
由于需要在项目中使用,所以不得不转换使用OpenCV来实现它。
环境:OpenCV2.46 + VS2010
代码如下:
// opencv学习笔记-图像亮度变换(图像增强).cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#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.cols; y++){p = src.ptr<uchar>(y); //行指针for ( x = 0; x < src.rows; 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 _tmain(int argc, _TCHAR* argv[]){Mat src;//读取图像src = imread("C:\\Documents and Settings\\Administrator\\My Documents\\MATLAB\\rice.tif",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.OpenCV 下面的图像亮度变换
0 0
- opencv中的图像亮度变换(图像增强)
- opencv中的图像亮度变换(图像增强)
- OpenCV中的图像变换
- openCV中的图像变换
- 图像亮度增强
- 图像亮度变换
- 图像亮度变换函数
- OpenCV 下面的图像亮度变换 Intensity transformation
- OpenCV 下面的图像亮度变换 Intensity transformation
- 学习OpenCV(四) 改变图像的对比度和亮度——像素变换
- 【图像处理】MATLAB:亮度变换
- 图像的亮度变换和对比度变换
- OpenCV图像变换----图像平滑
- opencv 灰度图像增强
- opencv-图像增强
- opencv图像增强demo
- OpenCV笔记 图像增强
- OpenCV图像亮度、对比度调节
- 泛泰A860 PIZEO /TS5000协议/TI drv2665芯片 Android内核震动驱动源码
- 安装 黑苹果
- 地方网站站长的知识结构
- 地方网站站长的知识结构
- 总结一下seo
- opencv中的图像亮度变换(图像增强)
- USACO ride
- UVa 673 括号平衡
- 1Z0-051 QUESTION 25 表名应该注意的地方和CLOB应该注意的地方
- 进制转换、冒泡排序、选择排序
- 图的深度优先遍历--邻接表实现
- C运行时库函数和API函数的区别和联系
- 对jeecg分析--利与弊
- android 从源码分析为什么Listview初次显示时没滚动却自动调用onScroll方法的原因