在 OpenCV 中,我想将 Point(x,y) 之类的点位置返回给我在鼠标回调函数中单击图像的 main() 函数。除了设置全局变量之外还有其他方法吗?
我不想在 on_mouse() 函数中编写所有代码。
谢谢
在 OpenCV 中,我想将 Point(x,y) 之类的点位置返回给我在鼠标回调函数中单击图像的 main() 函数。除了设置全局变量之外还有其他方法吗?
我不想在 on_mouse() 函数中编写所有代码。
谢谢
要在那里扩展 Safirs 的想法,除了一个类或类似的东西,你可以传入这一点本身:
void on_mouse( int e, int x, int y, int d, void *ptr )
{
Point*p = (Point*)ptr;
p->x = x;
p->y = y;
}
Point p;
namedWindow("win");
setMouseCallback("win",on_mouse, (void*)(&p) );
// changed value of p will be accessible here
您可以通过将指向数据的指针作为参数传递给setMouseCallback()
. 同意@berek,只是想在下面展示一个完整的示例,以避免混淆全局变量。
using namespace cv;
void on_mouse( int e, int x, int y, int d, void *ptr )
{
Point*p = (Point*)ptr;
p->x = x;
p->y = y;
}
in main() {
Point p;
namedWindow("window");
Mat image = imread("someimage.jpg");
imshow(image);
//pass a pointer to `p` as parameter
setMouseCallback("window",on_mouse, &p );
// p will update with new mouse-click image coordinates
// whenever user clicks on the image window
}
不,这是不可能的,因为on_mouse()
是一个回调函数。这是它的opencv文档。
所以,“全局”变量是解决这个问题的唯一方法。或者,如果您正在寻找更好的解决方案,您可以创建一个包装类,其中包含namedWindow
和MouseCallback
以及一个私有成员变量,在调用鼠标回调函数时对其进行操作。