• Open Source Computer Vision Library

鼠标绘图

Wikipedia,自由的百科全书

Image:Example-inpaint.png

  1. #ifdef _CH_
  2. #pragma package <opencv>
  3. #endif
  4.  
  5. #include "cv.h"
  6. #include "highgui.h"
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. IplImage* inpaint_mask = 0;
  11. IplImage* img0 = 0, *img = 0, *inpainted = 0;
  12. CvPoint prev_pt = {-1,-1};
  13.  
  14. void on_mouse( int event, int x, int y, int flags, void* zhang)
  15. {
  16. if( !img )
  17. return;
  18.  
  19. if( event == CV_EVENT_LBUTTONUP || !(flags & CV_EVENT_FLAG_LBUTTON) )
  20. prev_pt = cvPoint(-1,-1);
  21. else if( event == CV_EVENT_LBUTTONDOWN )
  22. prev_pt = cvPoint(x,y);
  23. else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON) )
  24. {
  25. CvPoint pt = cvPoint(x,y);
  26. if( prev_pt.x < 0 )
  27. prev_pt = pt;
  28. cvLine( inpaint_mask, prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
  29. cvLine( img, prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
  30. prev_pt = pt;
  31. cvShowImage( "image", img );
  32. }
  33. }
  34.  
  35.  
  36. int main( int argc, char** argv )
  37. {
  38. char* filename = argc >= 2 ? argv[1] : (char*)"fruits.jpg";
  39.  
  40. if( (img0 = cvLoadImage(filename,-1)) == 0 )
  41. return 0;
  42.  
  43. printf( "Hot keys: \n"
  44. "\tESC - quit the program\n"
  45. "\tr - restore the original image\n"
  46. "\ti or ENTER - run inpainting algorithm\n"
  47. "\t\t(before running it, paint something on the image)\n" );
  48.  
  49. cvNamedWindow( "image", 1 );
  50.  
  51. img = cvCloneImage( img0 );
  52. inpainted = cvCloneImage( img0 );
  53. inpaint_mask = cvCreateImage( cvGetSize(img), 8, 1 );
  54.  
  55. cvZero( inpaint_mask );
  56. cvZero( inpainted );
  57. cvShowImage( "image", img );
  58. cvShowImage( "watershed transform", inpainted );
  59. cvSetMouseCallback( "image", on_mouse, 0 );
  60.  
  61. for(;;)
  62. {
  63. int c = cvWaitKey(0);
  64.  
  65. if( (char)c == 27 )
  66. break;
  67.  
  68. if( (char)c == 'r' )
  69. {
  70. cvZero( inpaint_mask );
  71. cvCopy( img0, img,0 );
  72. cvShowImage( "image", img );
  73. }
  74.  
  75. if( (char)c == 'i' || (char)c == '\n' )
  76. {
  77. cvNamedWindow( "inpainted image", 1 );
  78. cvInpaint( img, inpaint_mask, inpainted, 3, CV_INPAINT_TELEA );
  79. cvShowImage( "inpainted image", inpainted );
  80. }
  81. }
  82.  
  83. return 1;
  84. }
  85.  
Views
Personal tools