opencv - 使用 cvSetMouseCallback 处理鼠标事件

标签 opencv mouseevent

我正在使用 OS X/X Code/OpenCV 2.2 编写眼动仪代码。作为 Eye Tracker 训练过程的一部分,我使用 cvSetMouseCallback 来捕获数据,如下所示: 右击右眼;左键单击左眼。

但是,我发现该程序只能用左键单击 (CV_EVENT_LBUTTONDOWN) 而不能用右键单击 (CV_EVENT_RBUTTONDOWN)。起初,我以为是触控板和鼠标设置问题,结果发现我已经在机器中将两个Secondary Click都设置为“Right”。感谢有人可以对此有所了解吗?感谢您花时间研究这个问题。

对于那些感兴趣的人,我有一个简单的 cvSetMouseCallback 代码片段:

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

void my_mouse_callback( int event, int x, int y, int flags, void* param );

int main (int argc, const char * argv[]) 
{

CvCapture *capture;
IplImage  *img;
int       key = 0;

// initialize camera
capture = cvCaptureFromCAM( 0 );

// always check
assert( capture );

// create a window
cvNamedWindow( "video", 1 );

while( key != 'q' ) {
    // get a frame
    img = cvQueryFrame( capture );

// set the mouse callback function. 
cvSetMouseCallback( "video", my_mouse_callback, (void*) img);

    // always check
    if( !img ) break;

// 'fix' frame
    cvFlip( img, img, 1 );
    img->origin = 0;

cvShowImage("video", img );

    // quit if user press 'q'
    key = cvWaitKey( 5 );

}

// free memory
cvReleaseCapture( &capture );
cvDestroyWindow( "video" );

return 0;

}

void my_mouse_callback( int event, int x, int y, int flags, void* param ){
//IplImage* image = (IplImage*) param;


switch( event ){
    case CV_EVENT_LBUTTONDOWN:
        printf("LBUTTONDOWN\n");
        break;

    case CV_EVENT_RBUTTONDOWN:
        printf("RBUTTONDOWN\n");
        break;

    case CV_EVENT_FLAG_CTRLKEY:
        printf("FLAG_LBUTTONDBLCLK\n");
        break;
}

}

最佳答案

尝试删除这一行:

cvSetMouseCallback( "video", my_mouse_callback, (void*) img);

从循环中将其紧接在:

cvNamedWindow( "video", 1 );

问候!

关于opencv - 使用 cvSetMouseCallback 处理鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000721/

相关文章:

c - (Linux) 如何在 c 中没有 x 的情况下获取鼠标的初始位置或设置光标位置?

image-processing - 一种快速细化算法

python - 来自多个摄像机的视频拼接

javascript - 当 Firefox 自动滚动时捕获鼠标滚轮事件

javascript - 无法通过 Chrome 上的 JavaScript 控制台触发 <tr> 元素上的 onmouseup 事件

java - 如何防止轻量级组件接收鼠标事件?

java - 使用 Java 和 OpenCV 检测图像中的虹膜和瞳孔

c++ - OpenCV - 为什么这个构建错误?

python - 从label_image绘制轮廓

objective-c - NSButton 子类用于更改按钮图像