通过减色运算来学习遍历图像像素值三种方法
2016-04-27 11:11
357 查看
#include "opencv2/opencv.hpp" using namespace cv; void colorReduce0(Mat &src,Mat &dst,int div); void colorReduce1(Mat &src,Mat &dst,int div); void colorReduce2(Mat &src,Mat &dst,int div); void main() { Mat SrcImg=imread("C:\\Users\\Administrator\\Desktop\\工作\\testp\\02.jpg"); Mat DstImg; DstImg.create(SrcImg.rows,SrcImg.cols,SrcImg.type()); colorReduce2(SrcImg,DstImg,32); imshow("src",SrcImg); imshow("dst",DstImg); waitKey(0); } void colorReduce0(Mat &src,Mat &dst,int div) { int row=src.rows; int colsNum=src.cols*src.channels(); //这里能处理单通道或者多通道 for(int i=0;i<row;i++) { uchar *Srcdata=src.ptr<uchar>(i); //一开始写成src.ptr<uchar>[i]; uchar *Dstdata=dst.ptr<uchar>(i); for (int j=0;j<colsNum;j++) { Dstdata[j]=Srcdata[j]/div*div+div/2; } } } void colorReduce1(Mat &src,Mat &dst,int div) { Mat_<Vec3b>::iterator it=src.begin<Vec3b>(); Mat_<Vec3b>::iterator itend=src.end<Vec3b>(); Mat_<Vec3b>::iterator it_dst=dst.begin<Vec3b>(); for(;it!=itend;it++) { (*it_dst)[0]=(*it)[0]/div*div+div/2; (*it_dst)[1]=(*it)[1]/div*div+div/2; (*it_dst)[2]=(*it)[2]/div*div+div/2; it_dst++; } } void colorReduce2(Mat &src,Mat&dst,int div) { int rowNum=src.rows; int colNum=src.cols; for(int i=0;i<rowNum;i++) for (int j=0;j<colNum;j++) //注意at是at(int y,int x); { dst.at<Vec3b>(i,j)[0]=src.at<Vec3b>(i,j)[0]/div*div+div/2; dst.at<Vec3b>(i,j)[1]=src.at<Vec3b>(i,j)[1]/div*div+div/2; dst.at<Vec3b>(i,j)[2]=src.at<Vec3b>(i,j)[2]/div*div+div/2; } }
相关文章推荐
- If Is Evil
- ORACLE语句获取表名列名
- 是否有Root权限
- mysql table checksum
- Qt入门之信号与槽机制
- Mybatis之传多个参数方法总结
- Nio
- Struts2-S2-032远程命令执行EXP
- 数据结构和算法 c#– 1.单项链表
- Redis复制与可扩展集群搭建
- ClassNotFoundException和NoClassDefFoundError的区别
- 在string.xml显示%
- 2016年4月27
- 左右按钮轮播代码
- eclipse中svn的使用:Failed to run the WC DB work queue associated with 'E:\NewEclip
- mysql 远程登录
- 关于UITextView上部出现空白一步解决
- c++内存分配方式
- 子网掩码与子网划分两个分别是什么意思
- awda