基于OpenCV实现图像线性变化
来源:互联网 发布:js 删除所有class 编辑:程序博客网 时间:2024/05/16 01:53
基础知识: (2) 当a=1时,且b不等于0时,操作仅仅使得所有的像素灰度值上移或者下移,其效果使得整个输出图像更亮或者更暗 (4)特殊情况下,当a=1,b=0时,输入图像和输出图像一致; 当a=-1,b=255,输出图像的灰度正好反转。灰度反转处理适用于增强暗色图像中的亮度较大的细节部分,这也是由人的视觉特性决定的。
效果图片
线性灰度变换函数f(x)是一个一维线性函数
y=f(x)=ax+b
式中;a为线性函数的斜率,b为线性函数在y轴的截距,x表示输入图像的灰度值,y表示输出图像的灰度值。
(1) 当a>1时,输出图像的对比度将增加;当a<1时,输出图像的对比度将减小。
(3) 当a<1时,暗区域将变亮,亮区域将变暗,这种线性改变亮度可能由于像素亮度达到饱和(小于0或者大于255)而丢失一部分细节。
/*----------------------------------------------------------------------------------------------* 程序说明:基于OpenCV实现图像线性变化*开发环境:* win7+vs2010+opencv2.4.8*创建时间地点:* 陕西师范大学.2017.2.28*参考资料:* 《数字图像处理与计算机视觉》张铮,徐超-----那本蓝色书66页的算法*作 者:* 李先生-----------------------------------------------------------------------------------------------*/#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\imgproc\imgproc_c.h>//using namespace std;using namespace cv;/*----------------------------------线性变换函数的声明----------------------------------------*函数原型* bool LinTran(IplImage *srcImage, double a,double b);*参数* double a:线性变换的斜率* double b:线性变换的截距*返回值类型 * bool类型;true为成功,false为失败--------------------------------------------------------------------------------------------*/bool LinTran(IplImage *srcImage, double a,double b);//---------------------------------【Main 函数】------------------------------------------------// 我们的程序从这里开始执行//------------------------------------------------------------------------------------------------int main(){IplImage* srcImage=cvLoadImage("G:\\Image\\lena.png"); //加载一副图片double a=-1,b=255; //注意:这里的参数a,b可以根据具体需要进行设置CvSize graySize;graySize.height=srcImage->height;graySize.width=srcImage->width;IplImage* grayImage=cvCreateImage(graySize,srcImage->depth,1);cvCvtColor(srcImage,grayImage,CV_RGB2GRAY); //当数据类型一致时,它将图像从一个颜色空间(通道的数值)转换到另一个LinTran(grayImage,a,b); //调用线性变换函数cvNamedWindow("原图");cvNamedWindow("变换结果");cvShowImage("原图",srcImage);cvShowImage("变换结果",grayImage);waitKey(0);return 0;}bool LinTran(IplImage *grayImage, double a,double b) //线性变换函数的实现{if((grayImage->depth)!=8) return false;uchar gray; //存储当前光标像素的灰度值int target; //存储当前光标像素的目标值for(int h=0;h<grayImage->height;h++) //开始遍历grayImage灰度图像{for(int w=0;w<grayImage->width;w++){gray=(uchar)*((char*)(grayImage->imageData+h*grayImage->widthStep)+grayImage->nChannels*w); //取出当前坐标点的灰度值target=a*gray+b;if(target<0) target=0;if(target>255) target=255;*(char*)(grayImage->imageData+h*grayImage->widthStep+grayImage->nChannels*w) = target; //将目标值写入目标图像}}return true;}
效果图片
0 0
- 基于OpenCV实现图像线性变化
- 基于OpenCV实现图像平移
- 【OpenCV】图像线性混合
- opencv 线性图像融合
- opencv基于直方图实现图像检索匹配
- 基于直方图的图像检索OpenCV实现
- 基于OpenCV实现------图像的转置
- 【OpenCV学习笔记】之五 RGB图像归一化处理函数,消除线性变化的光照影响
- opencv-输入两幅图像实现线性融合
- opencv图像霍夫变化
- opencv图像线性混合操作
- 基于OpenCV 图像分割
- 基于OpenCV平滑图像
- java实现图像的直方图均衡以及灰度线性变化,灰度拉伸
- 基于CUDA和OpenCV实现的图像GAMMA变换
- 基于guided image filtering的图像去雾 opencv实现
- VS2010实现opencv基于DCT的图像压缩
- 彩色图像直方图均衡化 --- 基于OpenCV中EqualizeHist_Demo实现
- python的迭代器iterator
- 中央巡视组进驻北京大学的必要性
- 酒店管理系统 添加数据
- 安装manjaro
- 生成jks签名文件
- 基于OpenCV实现图像线性变化
- 常用API总结(1)
- iOS 用UIView自定义版本升级提示框
- 我的科研生活2017-2-28
- Latex 参考文献引用 出错 “missing \item”
- Apache部署django项目
- springMVC对于controller处理方法返回值的可选类型
- 3.MapReduce高级接口编程(partitioner、sort、combiner)
- 【Java每日一题】20170301