Opencv学习手册(四)--- 图像灰度变换
2015-11-12 09:50
826 查看
#include <opencv2/opencv.hpp> using namespace cv; /* 灰度变换函数ImageAdjust 其中,源图像src和目标图像dst均为8比特的灰度图像 默认的参数值有: [low, high] = [0,1]; [bottom, top] = [0,1]; 线性变换:将源灰度值的[low, high]区间线性变换到[bottom, top]区间 如果变换成功,返回0,否则返回非零值。 */ int ImageAdjust(IplImage* src, IplImage* dst, double low, double high, double bottom, double top) { if( low<0 || low>1 || high <0 || high>1 || bottom<0 || bottom>1 || top<0 || top>1 || low>=high) return -1;//输入参数值不符合函数要求,则返回失败值 //将输入参数缩放到8比特图像的灰度级别[0, 255]上 double low2 = low*255; double high2 = high*255; double bottom2 = bottom*255; double top2 = top*255; double k = (top2 - bottom2)/(high2 - low2);//计算直线斜率 int x,y; double val; //对图像中的像素逐个进行灰度变换 for( y = 0; y < src->height; y++)//y为像素的纵坐标 { for (x = 0; x < src->width; x++)//x为像素的横坐标 { val= (uchar) src->imageData [ src->widthStep*y + x]; //得到源图像中像素点(x, y) 的灰度值 if(val>=1&&val<=125) val=0; if(val>125&&val<=255) val=255; //val = (val - low2)* k + bottom2; //val = 255-val;//图像求反 //越界处理,保证灰度值落在有效的灰度级别内 if(val>255) val=255; if(val<0) val=0; dst->imageData[ dst->widthStep*y + x] = val;//对目标图像的像素点(x, y)重新赋灰度值 } } return 0; } int main( int argc, char** argv ) { argv[1]="test.jpg"; IplImage *src = 0, *dst = 0; if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL)//参数0表示强制转换为单通道灰度图像 return -1;//指定读取灰度图像,否则程序退出 cvNamedWindow( "src", 1 ); cvNamedWindow( "result", 1 ); //以下为图像增强过程 //先复制源图像 dst = cvCloneImage(src); //输入参数 [0,0.5] 和 [0.5,1]进行灰度变换 if( ImageAdjust( src, dst, 0, 0.5, 0.5, 1)!=0) return -1; cvShowImage( "src", src ); cvShowImage( "result", dst ); cvWaitKey(0); cvDestroyWindow("src"); cvDestroyWindow("result"); cvReleaseImage( &src ); cvReleaseImage( &dst ); return 0; }
相关文章推荐
- window汇编 linux汇编比较/intel汇编 GT&T汇编
- Could not find Developer Disk Image
- Linux如何查看系统各种信息 (常用命令)
- linux系统下软件安装包类型及安装介绍
- 局域网不能访问 CentOS 的端口解决方案
- CentOS 安装 SonarQube
- ubuntu修改主机名
- CentOS 无法执行ftp指令
- Nginx配置thinkPHP 支持phpinfo和rewrite
- Mybatis使用时Propertyplaceholderconfigurer导出配置数据无法读入
- linux select poll epoll的区别
- linux中scp保存密钥信息的文件
- Linux档案内容查阅的命令
- 记一次linux服务器问题处理过程
- fopen与open的区别
- Linux下如何查看tomcat是否启动/系统日志等
- 【转】如何写出不可维护的服务端程序
- 从零单排linux&hi3516(1)-nfs挂载出现的问题、wmwaretools
- Nginx配置文件详细说明
- 如果自己搭建linux 企业生产环境可以有什么可以自己参考的案例吗