鼠标处理:打印像素位置

时间:2011-05-13 06:29:32

标签: visual-studio-2010 opencv callback mouseevent

我一直在尝试在VS2010中使用OpenCV,特别是在鼠标处理领域。到目前为止,我有这个:

CV_EVENT_LBUTTONDOWN
        :drawing_line = true;
        cvLine( frame, cvPoint(x,y),cvPoint(350,500), CV_RGB(255,0,0), CV_AA, 15,0 );
        fprintf( stdout, "Point found. %i, %i \n", object_x0, object_y0 );
        break;

我想要它做的是返回我点击的像素的位置,但它返回的全部是“Point found。0,0”而不是实际位置。最后,我想使用带有cvLine的点来绘制一条线,但是现在我只想得到一些返回给我的值。任何建议将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

您可以通过将其作为参数传递给鼠标回调函数来获取鼠标单击的位置,如下所示:

void onMouse(int evt, int x, int y, int flags, void* param) {
    if(evt == CV_EVENT_LBUTTONDOWN) {
        cv::Point* ptPtr = (cv::Point*)param;
        ptPtr->x = x;
        ptPtr->y = y;
    }
}

int main() {
    cv::Point2i pt(-1,-1);
    cv::namedWindow("Output Window");
    frame = cv::imread("image.jpg");
    cv::imshow(winName, frame);

    cv::setMouseCallback(winName, onMouse, (void*)&pt);
    // Note that we passed '&pt' (a pointer
    // to `pt`) to the mouse callback function.
    // Therefore `pt` will update its [x,y] coordinates
    // whenever user left-clicks on the image in "Output Window".
}

答案 1 :(得分:0)

将点作为参数传递给Mouse回调函数。

void onMouse(int event, int x, int y, int flags, void* param)

当您单击时,您将要将这些x,y保存到全局,然后在单击时将其保存为不同的全局,然后在两者之间绘制一条线。