1
我正在使用Visual C++和OpenCV。如何訪問二進制Mat圖像中的像素值?
我想問一下,我如何訪問OpenCV中Mat中的像素元素。
我的意思是,我想,如果是1或0像素...圖像是二進制的閾值的二進制圖像墊,以驗證...
我可怎麼辦來訪問像素,其中x和y(或行和列),並驗證此值?
你能幫我嗎?提前致謝。
我正在使用Visual C++和OpenCV。如何訪問二進制Mat圖像中的像素值?
我想問一下,我如何訪問OpenCV中Mat中的像素元素。
我的意思是,我想,如果是1或0像素...圖像是二進制的閾值的二進制圖像墊,以驗證...
我可怎麼辦來訪問像素,其中x和y(或行和列),並驗證此值?
你能幫我嗎?提前致謝。
用於消元素訪問,你可以參考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;
對不起,但此解決方案適用於灰色或彩色圖像。我有一個二進制閾值圖像,並在運行時opencv創建一個錯誤的尋址與函數「image.at二進制圖像。你能告訴我如何訪問像素值二進制圖像?我在互聯網上搜索和opencv指南,但例子它總是爲灰色或彩色圖像... –
Domenico
'binary.at(cv :: Point2i(u,v))= 255;'工作*設置*二元素的元素。我沒有運氣(u,v)'是我的'int'像素座標,'mat'被初始化爲cv :: Mat二進制(cv :: Mat :: zeros(mask_size,CV_8UC1) );' –