2013-10-24 74 views
1

我正在使用Visual C++和OpenCV。如何访问二进制Mat图像中的像素值?

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

我的意思是,我想,如果是1或0像素...图像是二进制的阈值的二进制图像垫,以验证...

我可怎么办来访问像素,其中x和y(或行和列),并验证此值?

你能帮我吗?提前致谢。

回答

3

用于消元素访问,你可以参考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; 
} 

编辑: -

对于二进制图像可以用垫访问像素值::在(行,列)方法。

下面的例子显示了如何做到这一点。这里的图像是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; 
+0

对不起,但此解决方案适用于灰色或彩色图像。我有一个二进制阈值图像,并在运行时opencv创建一个错误的寻址与函数“image.at 二进制图像。你能告诉我如何访问像素值二进制图像?我在互联网上搜索和opencv指南,但例子它总是为灰色或彩色图像... – Domenico

+0

'binary.at (cv :: Point2i(u,v))= 255;'工作*设置*二元素的元素。我没有运气(u,v)'是我的'int'像素坐标,'mat'被初始化为cv :: Mat二进制(cv :: Mat :: zeros(mask_size,CV_8UC1) );' –