opencv设置鼠标回调
我是OpenCV的初学者,希望在控制台中打印我通过单击定义的像素(RGB格式)的特定值 经过一些搜索,我设法找到了我在图像上点击的坐标 如果有人知道如何做到这一点,请修改我正在使用的代码:opencv设置鼠标回调,opencv,mouseevent,Opencv,Mouseevent,我是OpenCV的初学者,希望在控制台中打印我通过单击定义的像素(RGB格式)的特定值 经过一些搜索,我设法找到了我在图像上点击的坐标 如果有人知道如何做到这一点,请修改我正在使用的代码: void mouseEvent (int evt, int x, int y, int flags, void* param) { if (evt == CV_EVENT_LBUTTONDOWN) { printf("%d %d
void mouseEvent (int evt, int x, int y, int flags, void* param)
{
if (evt == CV_EVENT_LBUTTONDOWN)
{
printf("%d %d\n",x ,y );
}
}
这就是我用来调用函数的地方:
cvSetMouseCallback("blah blah", mouseEvent, 0);
将您的图像放置在称为frame的垫子中,然后:
namedWindow("test");
cvSetMouseCallback("test", mouseEvent, &frame);
char key = 0;
while ((int)key != 27) {
imshow("test", frame);
key = waitKey(1);
}
其中,mouseEvent定义为:
void mouseEvent(int evt, int x, int y, int flags, void* param) {
Mat* rgb = (Mat*) param;
if (evt == CV_EVENT_LBUTTONDOWN) {
printf("%d %d: %d, %d, %d\n",
x, y,
(int)(*rgb).at<Vec3b>(y, x)[0],
(int)(*rgb).at<Vec3b>(y, x)[1],
(int)(*rgb).at<Vec3b>(y, x)[2]);
}
}
void mouseEvent(int-evt、int-x、int-y、int-flags、void*param){
Mat*rgb=(Mat*)参数;
如果(evt==CV_事件_LBUTTONDOWN){
printf(“%d%d:%d,%d,%d\n”,
x、 y,,
(int)(rgb).at(y,x)[0],
(int)(rgb).at(y,x)[1],
(int)(rgb).at(y,x)[2]);
}
}
将您的图像放在一个名为frame的垫子上,然后:
namedWindow("test");
cvSetMouseCallback("test", mouseEvent, &frame);
char key = 0;
while ((int)key != 27) {
imshow("test", frame);
key = waitKey(1);
}
其中,mouseEvent定义为:
void mouseEvent(int evt, int x, int y, int flags, void* param) {
Mat* rgb = (Mat*) param;
if (evt == CV_EVENT_LBUTTONDOWN) {
printf("%d %d: %d, %d, %d\n",
x, y,
(int)(*rgb).at<Vec3b>(y, x)[0],
(int)(*rgb).at<Vec3b>(y, x)[1],
(int)(*rgb).at<Vec3b>(y, x)[2]);
}
}
void mouseEvent(int-evt、int-x、int-y、int-flags、void*param){
Mat*rgb=(Mat*)参数;
如果(evt==CV_事件_LBUTTONDOWN){
printf(“%d%d:%d,%d,%d\n”,
x、 y,,
(int)(rgb).at(y,x)[0],
(int)(rgb).at(y,x)[1],
(int)(rgb).at(y,x)[2]);
}
}
只是为了澄清您对克里斯蒂安的回答:cvSetMouseCallback()
的最后一个参数是指针,用于向回调发送用户数据。因此,我们感兴趣的数据发送到图像本身,这样当点击时,您可以访问指定位置的像素。这就是答案。THX对于答案伴侣,但仍然存在一些困难:我在OpenDV C++上使用OpenCV 2.1。我已尝试将Mat*rgb切换为CvScalar,但仍然必须更改(*rgb).at(y,x)[0]。如果您知道如何将其更改为2.1,我将非常感激!成功了!我将(int)(rgb).at(y,x)[0]替换为((uchar)(rgb->imageData+rgb->widthStepy))[x*3]和Mat rgb=(Mat*)参数;使用IplImage*rgb=(IplImage*)参数;谢谢你的帮助!为了向克里斯蒂安澄清您的答案:cvSetMouseCallback()
的最后一个参数是指针,用于向回调发送用户数据。因此,我们感兴趣的数据发送到图像本身,这样当点击时,您可以访问指定位置的像素。这就是答案。THX对于答案伴侣,但仍然存在一些困难:我在OpenDV C++上使用OpenCV 2.1。我已尝试将Mat*rgb切换为CvScalar,但仍然必须更改(*rgb).at(y,x)[0]。如果您知道如何将其更改为2.1,我将非常感激!成功了!我将(int)(rgb).at(y,x)[0]替换为((uchar)(rgb->imageData+rgb->widthStepy))[x*3]和Mat rgb=(Mat*)参数;使用IplImage*rgb=(IplImage*)参数;谢谢你的帮助!