我一直在尝试在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;
我希望它做的是返回我单击的像素的位置,但它返回的只是"找到点。0,0"而不是实际位置。最终,我想使用 cvLine 的点来画一条线,但现在我只想将一些值返回给我。 任何建议将不胜感激。谢谢!
您可以通过将鼠标单击作为参数传递给鼠标回调函数来获取鼠标单击的位置,如下所示:
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".
}
点作为参数传递给鼠标回调函数。
void onMouse(int event, int x, int y, int flags, void* param)
您需要在向下单击时将这些 x, y 保存到一个全局中,然后在向上单击时将另一个全局保存,然后在两者之间画一条线。