/backup/FaceDetection/opencv_simulator/share/opencv/samples/c/inpaint.cpp

https://github.com/BynreForest/FaceDetection · C++ · 84 lines · 68 code · 16 blank · 0 comment · 23 complexity · 6615c73a96e69ec92626c6a3ecec7efa MD5 · raw file

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