我在屏幕上以图像的形式显示Mat矩阵。我想点击这个图像上的一个位置,我想在屏幕上获得那个像素值。
如何使用OpenCV、C++?
下面的代码用于IplImage
,但使用Mat
时的结果应该相同。
void my_mouse_callback(int event, int x, int y, int flags, void* param){
IplImage* image = (IplImage*) param;
switch(event) {
case CV_EVENT_LBUTTONDOWN:
std::cout << "x: " << x << std::endl;
std::cout << "y: " << y << std::endl;
break;
default:
break;
}
}
int main() {
IplImage* image = cvLoadImage("picture_file_name_here");
cvNamedWindow("Test");
cvSetMouseCallback("Test", my_mouse_callback, (void*) image);
cvShowImage("Test", image);
cvWaitKey(0);
cvReleaseImage(&image);
return 0;
}
希望这能有所帮助。
对于cv::Mat,它看起来像:
cv::Mat mat; // load img, etc
cv::setMouseCallback("Test", my_mouse_callback, (void*) &mat);
// ...
void my_mouse_callback(int event, int x, int y, int flags, void* param){
cv::Mat mat = *((cv::Mat*)param); // so, 1st cast, then deref
}