歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在OpenCV中利用鼠標繪制直線

在OpenCV中利用鼠標繪制直線

日期:2017/3/1 10:10:34   编辑:Linux編程

在這裡不多說了,直接貼代碼。希望對大家學習OpenCV有用,歡迎大家的建議!

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdio.h>
  4. #pragma comment( lib, "cv.lib" )
  5. #pragma comment( lib, "cxcore.lib" )
  6. #pragma comment( lib, "highgui.lib" )
  7. IplImage* src = 0;
  8. IplImage* dst = 0;
  9. void on_mouse( int event, int x, int y, int flags, void* ustc)
  10. {
  11. static CvPoint pre_pt = {-1,-1};
  12. static CvPoint cur_pt = {-1,-1};
  13. CvFont font;
  14. cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);
  15. char temp[16];
  16. if( event == CV_EVENT_LBUTTONDOWN )
  17. {
  18. cvCopy(dst,src);
  19. sprintf(temp,"(%d,%d)",x,y);
  20. pre_pt = cvPoint(x,y);
  21. cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));
  22. cvCircle( src, pre_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
  23. cvShowImage( "src", src );
  24. cvCopy(src,dst);
  25. }
  26. else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
  27. {
  28. cvCopy(dst,src);
  29. sprintf(temp,"(%d,%d)",x,y);
  30. cur_pt = cvPoint(x,y);
  31. cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));
  32. cvLine(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, CV_AA, 0 );
  33. cvShowImage( "src", src );
  34. }
  35. else if( event == CV_EVENT_LBUTTONUP )
  36. {
  37. sprintf(temp,"(%d,%d)",x,y);
  38. cur_pt = cvPoint(x,y);
  39. cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));
  40. cvCircle( src, cur_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
  41. cvLine( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, CV_AA, 0 );
  42. cvShowImage( "src", src );
  43. cvCopy(src,dst);
  44. }
  45. }
  46. int main()
  47. {
  48. src=cvLoadImage("lena.jpg",1);
  49. dst=cvCloneImage(src);
  50. cvNamedWindow("src",1);
  51. cvSetMouseCallback( "src", on_mouse, 0 );
  52. cvShowImage("src",src);
  53. cvWaitKey(0);
  54. cvDestroyAllWindows();
  55. cvReleaseImage(&src);
  56. cvReleaseImage(&dst);
  57. return 0;
  58. }

效果圖如下,說明一下這裡的坐標原點是圖像的左上角。

Copyright © Linux教程網 All Rights Reserved