如何检测鼠标在c ++自定义形状的光标图像上的位置

在我的问题中,有一个图像,我需要让用户select该图像中的某个特定的位置。 为此,我需要用光标提供一个方形的形状(由我自己的宽度和高度定制)。 然后用户只是想把它放在给定的图像的位置,然后单击。 那我想要去那个地方 任何具有这样的经验的人请指导我在c + +窗体中的示例代码。

这是解决这个问题的理想方法。 引用这个来源

#include "stdafx.h" #include "test.h" #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #include <cv.h> #include <highgui.h> IplImage* frame, *img1; CvPoint point; int drag = 0; CvCapture *capture = 0; int key = 0; CvRect rect; void mouseHandler(int event, int x, int y, int flags, void* param) { /* user press left button */ if (event == CV_EVENT_LBUTTONDOWN && !drag) { point = cvPoint(x, y); drag = 1; } /* user drag the mouse */ if (event == CV_EVENT_MOUSEMOVE && drag) { img1 = cvCloneImage(frame); cvRectangle(img1, point, cvPoint(x, y), CV_RGB(255, 0, 0), 1, 8, 0); cvShowImage("result", img1); } /* user release left button */ if (event == CV_EVENT_LBUTTONUP && drag) { rect = cvRect(point.x, point.y, x - point.x, y - point.y); cvSetImageROI(frame, rect); cvShowImage("result", frame); drag = 0; } /* user click right button: reset all */ if (event == CV_EVENT_RBUTTONUP) { drag = 0; } } int main(int argc, char *argv[]) { capture = cvCaptureFromCAM(0); if (!capture) { printf("Cannot open initialize webcam!\n"); exit(0); } /* create a window for the video */ cvNamedWindow("result", CV_WINDOW_AUTOSIZE); while (key != 'q') { frame = cvQueryFrame(capture); if (rect.width>0) cvSetImageROI(frame, rect); cvSetMouseCallback("result", mouseHandler, NULL); key = cvWaitKey(10); if ((char)key == 'r') { rect = cvRect(0, 0, 0, 0); cvResetImageROI(frame); } cvShowImage("result", frame); } cvDestroyWindow("result"); cvReleaseImage(&img1); return 0; } 

我建议使用VTK工具包,因为它具有光标位置的位置,但要确保图像的左上角用VTK(世界坐标系)(0,0)定位,或者如果您不想以这种方式定位图像您需要保持偏移量,并使用此偏移量来获取鼠标位置时的加/减。 一开始你可以参考下面的链接作为VTK光标位置代码的工作原理:

http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/ClickWorldCoordinates