我在鼠标左键上打印像素位置点击如下:
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)函数处理。
我该怎么做?
答案 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;。