如何从MouseCallback函数中获取main()中的数据
OpenCV: How to get data in main() from MouseCallback function?
我正在打印像素位置在鼠标左键点击像这样:
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;
}
为了更好的解决方案,考虑避免使用全局变量,并使用一个类来存储这些"点击"。
相关文章:
- 防止主数据类型C++的隐式转换
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 调用Main将替换矢量对象并覆盖数据
- 如何让我的构造函数和函数工作,以便我的 main() 能够同时显示字符串和 int 数据
- 地图数据结构在 Main 中不显示保存的条目.cpp
- 将指针作为私有数据成员传递到 Main 中的成员函数中
- 在main()中为通用模板类选择数据类型
- 如何通过main()函数传递私人数据地址
- 错误:main的声明中有两个或多个数据类型
- 如何从MouseCallback函数中获取main()中的数据
- 我如何通过多个函数传递数据并在main中正确调用它们
- 使用静态数据的构造函数在main()之前执行工作
- 在共享库和main之间共享全局数据
- 如何在main之前预加载数据