Opencv 使用鼠标回调打印坐标和像素值
这是我试过的代码,只打印坐标值,不打印像素值。Opencv 使用鼠标回调打印坐标和像素值,opencv,mouseevent,cout,mat,Opencv,Mouseevent,Cout,Mat,这是我试过的代码,只打印坐标值,不打印像素值。 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> void onMouse( int event, int x, int y, int, void* ); using namespace cv; Mat img = cv::imread("b.jpg", 0); /
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
void onMouse( int event, int x, int y, int, void* );
using namespace cv;
Mat img = cv::imread("b.jpg", 0); // force grayscale
Mat thresh=Mat::zeros(img.size(),CV_8UC1);
int main(int argc, char **argv)
{
if(!img.data) {
std::cout << "File not found" << std::endl;
return -1;
}
threshold(img,binary,50,255,THRESH_TOZERO);
namedWindow("thresh");
setMouseCallback( "thresh", onMouse, 0 );
imshow("thresh",thresh);
}
void onMouse( int event, int x, int y, int, void* )
{
if( event != CV_EVENT_LBUTTONDOWN )
return;
Point pt = Point(x,y);
std::cout<<"x="<<pt.x<<"\t y="<<pt.y<<"\t value="<<thresh.at<uchar>(x,y)<<"\n";
}
#包括
#包括
#包括
void onMouse(int事件,int x,int y,int,void*);
使用名称空间cv;
Mat img=cv::imread(“b.jpg”,0);//强制灰度
Mat thresh=Mat::zeros(img.size(),CV_8UC1);
int main(int argc,字符**argv)
{
如果(!img.data){
coutcout将uchar打印为字符,就像您看到的字符一样
只需使用“转换为int”将它们包装起来即可进行打印:
cout << int( thresh.at<uchar>(y,x) )
also note, that it's at<uchar>(y,x), not x,y
cout Thank you@berak.另一个问题:in.at(y,x),哪一个代表行号和列号?at(row_no,column_no)'基本上是:y=row_no,x=column_no'