2015-12-10 30 views
3

在我的問題中,有一個圖像,我需要讓用戶選擇該圖像中的某個特定位置。爲此我需要用光標提供一個方形的形狀(由我自己的寬度和高度定製)。然後用戶只想將其放置在給定圖像的位置並單擊。然後我想採取那個地點。任何具有這種經驗的人都可以用C++ windows窗體中的示例代碼指導我。如何檢測鼠標點擊在自定義形狀的光標在c + +圖像上的位置

+1

您需要一些GUI庫,因爲標準C++ 11不知道GUI。考慮可能是[Qt](http://qt.io/),它是跨平臺 –

回答

2

這是解決這個問題的理想途徑。請參考此源

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

我建議使用VTK工具包,因爲它有光標位置的位置,但要確保你的圖像左上角用VTK(世界座標系)(0,0)定位,或者如果你不想定位圖像的方式,那麼你需要保持偏移量,並使用此偏移量來獲取鼠標位置時添加/減少。在開始的時候你可以參考以下鏈接爲VTK光標位置代碼是如何工作的:

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

+0

我可以使用自定義形狀(方形)作爲光標嗎? –

+0

爲什麼不呢?這可以幫助你:http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/Cursor2D – realby

+0

好的謝謝你的指導 –