2013-10-24 126 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) );' –