如何访问二进制Mat图像中的像素值?

时间:2013-10-24 09:49:14

标签: c++ visual-c++ opencv image-processing

我正在使用Visual C ++和OpenCV。

我想问一下,如何在OpenCV中访问Mat中的像素元素。

我的意思是,我想在二进制Mat图像中验证一个像素是1还是0 ...图像是二进制阈值......

如何使用x和y(或行和coloumn)访问像素,并验证此值?

你能帮帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

对于Mat元素访问权限,您可以参考OpenCV官方Doc,这些link1, link2可能会有所帮助

这是一个简单的代码,可根据鼠标位置访问像素值并显示像素值。

#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;
 Mat image, src;
 char window_name[20]="Pixel Value Demo";

void onMouse( int event, int x, int y, int f, void* ){
 image=src.clone();
 Vec3b pix=image.at<Vec3b>(y,x);
 int B=pix.val[0];
 int G=pix.val[1];
 int R=pix.val[2];


 char name[30];
    sprintf(name,"R=%d",R);
    putText(image,name, Point(10,130) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"G=%d",G);
    putText(image,name, Point(10,170) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"B=%d",B);
    putText(image,name, Point(10,210) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"X=%d",x);
    putText(image,name, Point(10,300) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"Y=%d",y);
    putText(image,name, Point(10,340) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
 imshow( window_name, image );
}



int main( int argc, char** argv )
{
  namedWindow( window_name, CV_WINDOW_AUTOSIZE );

  src = imread( "ball.jpg");
  imshow( window_name, src );

  setMouseCallback( window_name, onMouse, 0 );

  waitKey(0);

  return 0;
}

修改: -

对于二进制图像,您可以使用Mat :: at(row,col)方法访问像素值。

在下面的示例中显示了如何执行此操作。这里的图像是uchar类型。

 Mat src(480,640,CV_8UC1,Scalar(0));
 circle(src,Point(src.cols/2,src.rows/2),100,Scalar(255),-1,8,0);

 int pix=(int)src.at<uchar>(src.rows/2,src.cols/2);
 cout<<pix<<endl;