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) );' –