如何从MouseCallback函数中获取main()中的数据

OpenCV: How to get data in main() from MouseCallback function?

本文关键字:数据 main 获取 MouseCallback 函数      更新时间:2023-10-16

我正在打印像素位置在鼠标左键点击像这样:

void CallBackFunc(int event, int x, int y, int flags, void* values)
{
     if  ( event == EVENT_LBUTTONDOWN )
     {
          cout << "Left button clicked at (" << x << ", " << y << ")" << endl;
     }

}
int main(int argc, char** argv)
{
     Mat img = imread("yava.bmp");
     namedWindow(" Window", 1);
     setMouseCallback(" Window", CallBackFunc, NULL);
     position(x,y); //to be implemneted
     imshow(" Window", img);
     waitKey(0);
     return 0;
}

现在我想获得这个位置,即x和y从CallBackFunc返回到main()中,这将由我的position(x,y)函数处理。

我该怎么做?

首先,阅读setMouseCallback等的文档

这是我要做的(这是一个典型的例子),而不需要修改太多代码:

vector<Point> points; // Store the points as global variables
void CallBackFunc(int event, int x, int y, int flags, void* values)
{
     if  ( event == EVENT_LBUTTONDOWN )
     {
          points.push_back(Point(x,y));
     }

}
int main(int argc, char** argv)
{
     Mat img = imread("yava.bmp");
     namedWindow(" Window", 1);
     setMouseCallback(" Window", CallBackFunc, NULL); // Add the pointer to the callback
     while (1)
     {
      //Draw your points
      for (int i=0;i<points.size();i++) circle(img,points.at(i),3,CV_RGB(255,0,0),-1);
      imshow(" Window", img);
      waitKey(10);// -> This is when your callback is called everytime you click
     }
     return 0;
}

为了更好的解决方案,考虑避免使用全局变量,并使用一个类来存储这些"点击"。