您的位置:首页 > 运维架构

OPENCV 通过Mat访问每个像素

2017-12-14 15:05 369 查看
先上代码:

#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];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: