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

时间:2014-07-04 13:15:41

标签: c++ opencv

我在鼠标左键上打印像素位置点击如下:

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;

}

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

首先,阅读有关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;

}

为了获得更好的解决方案,请考虑避免使用全局变量,并使用类来存储这些&#34;点击&#34;。