在我的問題中,有一個圖像,我需要讓用戶選擇該圖像中的某個特定位置。爲此我需要用光標提供一個方形的形狀(由我自己的寬度和高度定製)。然後用戶只想將其放置在給定圖像的位置並單擊。然後我想採取那個地點。任何具有這種經驗的人都可以用C++ windows窗體中的示例代碼指導我。如何檢測鼠標點擊在自定義形狀的光標在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
我可以使用自定義形狀(方形)作爲光標嗎? –
爲什麼不呢?這可以幫助你:http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/Cursor2D – realby
好的謝謝你的指導 –
- 1. 鼠標點擊位置上的PictureBox未檢測到在標籤
- 2. 如何用自定義圖像光標覆蓋鼠標光標?
- 3. 如何在Matlab圖形軸上獲得鼠標點擊位置?
- 4. 在圖片框中檢測鼠標點擊形狀
- 5. 檢測鼠標點擊位置
- 6. 如何讓鼠標在imageview的點擊位置上定位?
- 7. wxPython:檢測鼠標點擊位圖
- 8. 如何在C上設置鼠標光標位置?
- 9. 鼠標點擊圖片上的位置
- 10. 鼠標單擊圖像上的位置
- 11. 檢測鼠標在iframe上的位置
- 12. 如何將鼠標光標位置設置爲C#屏幕上的指定點?
- 13. 如何檢測鼠標點擊自定義wx.Panel?
- 14. GLUT鼠標點擊檢測
- 15. 在Dock上檢測鼠標,任何Dock圖標點擊
- 16. 如何在C#-WPF中關閉鼠標時檢測鼠標光標下的自定義控件?
- 17. 如何在鼠標光標上放置圖形?
- 18. 如何檢測jQuery中的鼠標點擊位置
- 19. 需要在鼠標位置的圖像/形狀
- 20. 光標在鼠標點擊更改
- 21. 確定圖像上的鼠標位置
- 22. 如何用Selenium在紅寶石網頁上檢查鼠標光標的形狀
- 23. 圖像到光標/自定義光標
- 24. 如何檢測鼠標點擊繪製的圖像?
- 25. 如何檢測鼠標點擊QLineEdit
- 26. C#自定義控件光標位置
- 27. 在NetLogo中檢測鼠標點擊/鼠標上移
- 28. 在Windows上獲取鼠標光標位置和按鈕狀態
- 29. 如何在循環中檢測鼠標在datagrid上的位置?
- 30. 在圖像上繪製鼠標點擊
您需要一些GUI庫,因爲標準C++ 11不知道GUI。考慮可能是[Qt](http://qt.io/),它是跨平臺 –