2011-05-13 80 views
1

我一直试图在VS2010中使用OpenCV做一些工作,特别是在鼠标处理领域。到目前为止,我有这样的:“点发现0,0”鼠标处理:打印像素位置

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; 

我希望它做的是回到我点击的像素的位置,但所有返回的,而不是实际位置。最后,我想用cvLine绘制一条线,但现在我只想返回一些值。任何建议将不胜感激。谢谢!

+0

是什么'object_x0'和'object_y0'? – Andrey 2011-05-13 06:53:07

+0

请参阅'OpenCV2.2 \ samples \ cpp \ camshiftdemo.cpp' – Andrey 2011-05-13 06:54:37

回答

0

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

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

你会想为y保存这些X,成为一个全球性,当你点击了下来,然后一个不同的世界,当你点击了,然后绘制两者之间的线路。

2

你可以把它当作参数传递给鼠标回调函数,像这样得到一个鼠标点击的位置:

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". 
} 
+0

感谢您的代码示例,但我们怎样才能看到鼠标点击的位置? – user8663682 2018-01-02 06:02:56