标签:
图像的遍历
原图
1.简单存取像素值
代码如下:
// Mat类图像遍历.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "highgui.h" using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { Mat img=imread("1.jpg"); Size size=Size(600,400); resize(img,img,size); //遍历方式 //1 简单存取像素值 switch(img.channels()) { case 1: {for(int i=0;i<img.rows;i++) { for(int j=0;j<img.cols;j++) { img.at<uchar>(i,j)=0; } } break; } case 3: { for(int i=0;i<img.rows;i++) { for(int j=0;j<img.cols;j++) { img.at<Vec3b>(i,j)[0]=0; img.at<Vec3b>(i,j)[1]=0; } } break; } } namedWindow("celtics",1); imshow("celtics",img); waitKey(0); return 0; }
由于opencv颜色顺序为BGR
将前面两种颜色置0,得到红色分量。
结果如下:
2.指针遍历
// Mat类图像遍历.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "highgui.h" using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { Mat img=imread("1.jpg"); Size size=Size(600,400); resize(img,img,size); //遍历方式 // 2 指针 int nrows=img.rows; int ncols=img.cols*img.channels(); if(img.isContinuous()) { ncols*=nrows; nrows=1; } uchar *data; for(int j=0;j<nrows;j++) { data=img.ptr<uchar>(j); for(int i=0;i<ncols;i+=3) { data[i]=0; data[i+1]=0; } } namedWindow("celtics",1); imshow("celtics",img); waitKey(0); return 0; }
同样将B、G分量置0,得到红色分量。
结果如下:
3.迭代器
标签:
原文地址:http://www.cnblogs.com/damocles/p/4845527.html