opencv c ++中的鼠标事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv c ++中的鼠标事件相关的知识,希望对你有一定的参考价值。
我想用这个功能编写一个程序:
当用户在窗口上单击鼠标左键时,构造一个半径为15的圆
起初我制作500 * 500的黑色图像
然后我使用setMouseCallback
for my_mouse_callback
和函数my_mouse_callback
我写了我的圆圈代码,当运行程序没有任何错误但只有一个黑色图像500 * 500当我点击鼠标左键没有任何反应,我知道我的程序有麻烦,但在哪里?请帮帮我我的程序是这样的:
void my_mouse_callback(int event, int x, int y, int flags, void* param);
int main() {
int i,j,k;
Mat image;
image.create(500,500,CV_8UC3);
namedWindow("amin");
for(i=0;i<500;i++){
for(j=0;j<500;j++){
for(k=0;k<3;k++){
Vec3b &intensity = image.at<vec3b>(j, i);
intensity.val[k]=0;
}
}
}
setMouseCallback( "amin", my_mouse_callback, &image );
imshow("amin",image);
waitKey(0);
return(0);
}
void my_mouse_callback( int event, int x, int y, int flags, void* param ) {
if(event==CV_EVENT_LBUTTONDOWN){
circle( image, Point(x,y), 20, Scalar(0xff,0xff,0xff) );
}
}
答案
这似乎是我没有使用的OpenCV,但是:
肯定无法从my_mouse_callback函数访问图像变量 - 它是main()的本地变量吗?你的意思是:
void my_mouse_callback( int event, int x, int y, int flags, void* param ) {
if(event==CV_EVENT_LBUTTONDOWN){
Mat* pImage = (Mat*)param;
Mat image = *pImage;
circle( image, Point(x,y), 20, Scalar(0xff,0xff,0xff) );
}
}
如果这个答案很愚蠢我会道歉,但我没有使用过CV,这是30秒文档阅读的结果。
另一答案
当我使用版本2.4.9的opencv时,我在modules / highgui / include / opencv2 / highgui.hpp中看到以下关键事件
enum
{
EVENT_MOUSEMOVE =0,
EVENT_LBUTTONDOWN =1,
EVENT_RBUTTONDOWN =2,
EVENT_MBUTTONDOWN =3,
EVENT_LBUTTONUP =4,
EVENT_RBUTTONUP =5,
EVENT_MBUTTONUP =6,
EVENT_LBUTTONDBLCLK =7,
EVENT_RBUTTONDBLCLK =8,
EVENT_MBUTTONDBLCLK =9
};
因此,请检查源文件,事件名称是否正确。
另一答案
替换这个:
imshow("amin",image);
waitKey(0);
用:
while(true){
imshow("amin",image);
waitKey(1);} // 1ms
以上是关于opencv c ++中的鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章