OPENCV 通过Mat访问每个像素

来源:互联网 发布:江国香织 知乎 编辑:程序博客网 时间:2024/06/04 17:40



先上代码:


#include<iostream>#include<opencv2/core/core.hpp>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(){    Mat diff=imread("/home/lisa/dataset/02m16001200/0.jpg");    for(int i=0;i<diff.rows;i++)    {        for(int j=0;j<diff.cols;j++)        {              Vec3b bgrPixel=diff.at<Vec3b>(i,j);              cout<<"rows=="<<i<<"cols=="<<j<<"  "<<bgrPixel<<endl;        }      }    cv::waitKey(0);    cout<<"hello world"<<endl;    return 0;}

Vec3b这种数据结构,存放了某个点的BGR三个通道的值,比如:这个代码输出如下:

rows==0cols==0 [0, 0, 0]

rows==0cols==1 [0, 0, 0]

rows==0cols==2 [0, 0, 0]

rows==0cols==3 [0, 0, 0]

rows==0cols==4 [0, 0, 0]

rows==0cols==5 [0, 0, 0]

rows==0cols==6 [0, 0, 0]

rows==0cols==7 [0, 0, 0]

rows==0cols==8 [0, 0, 0]

rows==0cols==9 [0, 0, 0]

rows==0cols==10 [0, 0, 0]

rows==0cols==11 [0, 0, 0]

rows==0cols==12 [0, 0, 0]

rows==0cols==13 [0, 0, 0]

rows==0cols==14 [0, 0, 0]

rows==0cols==15 [0, 0, 0]

rows==0cols==16 [0, 0, 0]

rows==0cols==17 [0, 0, 0]

rows==0cols==18 [0, 0, 0]

rows==0cols==19 [0, 0, 0]

rows==0cols==20 [0, 0, 0]

rows==0cols==21 [0, 0, 0]

rows==0cols==22 [1, 1, 1]

rows==0cols==23 [0, 0, 0]

rows==0cols==24 [0, 0, 0]

rows==0cols==25 [0, 0, 0]

rows==0cols==26 [0, 0, 0]

rows==0cols==27 [0, 0, 0]

rows==0cols==28 [1, 1, 1]

rows==0cols==29 [0, 0, 0]

rows==0cols==30 [0, 0, 0]

rows==0cols==31 [1, 1, 1]

rows==0cols==32 [0, 0, 0]

rows==0cols==33 [0, 0, 0]

rows==0cols==34 [0, 0, 0]

rows==0cols==35 [0, 0, 0]

rows==0cols==36 [0, 0, 0]

rows==0cols==37 [1, 1, 1]

rows==0cols==38 [0, 0, 0]

rows==0cols==39 [0, 0, 0]

rows==0cols==40 [0, 0, 0]

rows==0cols==41 [0, 0, 0]

rows==0cols==42 [0, 0, 0]

rows==0cols==43 [0, 0, 0]

rows==0cols==44 [0, 0, 0]

rows==0cols==45 [0, 0, 0]


若需要获取每个通道的像素点的值,可以如下:

for (int i = 0; i < image.cols; i++) {    for (int j = 0; j < image.rows; j++) {        Vec3b intensity = image.at<Vec3b>(j, i);        for(int k = 0; k < image.channels(); k++) {            uchar col = intensity.val[k];         }       }}