Windows — Как определить местоположение щелчка мыши на изображении с помощью курсора нестандартной формы в Переполнение стека

В моей проблеме есть изображение, и мне нужно дать пользователю выбрать определенное место в этом изображении. Для этого мне нужно предоставить квадратную форму (настраиваемую по ширине и высоте) курсором. Тогда пользователь просто хотел разместить это на месте данного изображения и нажать. Тогда я хочу взять это места. Может кто-нибудь с таким опытом, пожалуйста, направьте меня с примером кода в C ++ Windows Forms.

3

Решение

Это идеальный способ решения этой проблемы. сослаться на этот источник

#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;
}
2

Другие решения

Я бы предложил использовать набор инструментов VTK, так как он имеет положение курсора, но убедитесь, что верхний левый угол вашего изображения позиционирован с помощью VTK (мировой системы координат) (0,0) или если вы не хотите позиционировать изображение таким образом вам нужно сохранить смещение и использовать это смещение, чтобы сложить / вычесть, когда вы получите положение мыши. В начале вы можете обратиться по ссылке ниже, как работает код положения курсора VTK:

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

0

По вопросам рекламы [email protected]