/python-opencv/ctypes-opencv/tests/colorFill.py

http://mvh-source.googlecode.com/ · Python · 129 lines · 64 code · 48 blank · 17 comment · 3 complexity · ce976aaa9ecdf3c774388530fcdda878 MD5 · raw file

  1. #!/usr/bin/env python
  2. # from ctypes import sizeof
  3. # from ctypes_opencv import *
  4. import time
  5. import sys
  6. import random
  7. from opencv import cv
  8. from opencv import highgui
  9. orig_win = highgui.cvNamedWindow('original');
  10. binary_win = highgui.cvNamedWindow('binary');
  11. image = highgui.cvLoadImage("frame.jpg", 1);
  12. work = cv.cvCloneImage( image ); #cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
  13. tmp = cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
  14. hsv = cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
  15. hue = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  16. sat = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  17. val = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  18. hRange = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  19. sRange = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  20. mask = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
  21. #IplImage* cvCloneImage( const IplImage* image );
  22. work = image;
  23. lastMouseX = 0;
  24. lastMouseY = 0;
  25. active = False;
  26. hdims = 16
  27. hranges = [[0, 180]]
  28. hist = cv.cvCreateHist ([hdims], cv.CV_HIST_ARRAY, hranges )
  29. def mouseHandler( evt, mouseX, mouseY, flags, param ):
  30. global active, lastMouseX, lastMouseY
  31. if evt == highgui.CV_EVENT_LBUTTONDOWN:
  32. lastMouseX = mouseX
  33. lastMouseY = mouseY;
  34. active = True;
  35. highgui.cvSetMouseCallback("original", mouseHandler, None)
  36. while True:
  37. highgui.cvShowImage('original', work)
  38. if not active:
  39. highgui.cvWaitKey(100)
  40. continue
  41. color = cv.CV_RGB(
  42. random.randint( 0, 255 ),
  43. random.randint( 0, 255 ),
  44. random.randint( 0, 255 )
  45. );
  46. red = cv.CV_RGB(255, 0, 0);
  47. comp = cv.CvConnectedComp();
  48. point = cv.cvPoint( lastMouseX, lastMouseY );
  49. lo = 50;
  50. hi = 50;
  51. flags = 4 + (255 << 8) + cv.CV_FLOODFILL_FIXED_RANGE
  52. work = cv.cvCloneImage( image );
  53. cv.cvCvtColor( image, hsv, cv.CV_BGR2HSV)
  54. pixel = hsv[lastMouseY, lastMouseX];
  55. cv.cvFloodFill( work, point, color, cv.CV_RGB( lo, lo, lo ), cv.CV_RGB( hi, hi, hi ), comp, flags );
  56. #hsv_min = cv.cvScalar( pixel[1] - lo, pixel[2] - lo, pixel[3], 0 );
  57. #hsv_max = cv.cvScalar( pixel[1] + lo, pixel[2] + lo, pixel[3], 0 );
  58. #print cv.cvInRangeS( hsv, hsv_min, hsv_max, mask );
  59. #cv.cvInRangeS (hsv, hsv[lastMouseY, lastMouseX][1]-lo, hsv[lastMouseY, lastMouseX][1]-lo, mask)
  60. # cv.cvInRangeS( hsv, hsv_min, hsv_max, mask );
  61. #cv.cvSplit (hsv, hue, None, None, None);
  62. cv.cvSplit(hsv, hue, sat, val, None)
  63. # cv.cvInRangeS( hue, hLower, hUpper, hueRange );
  64. print pixel;
  65. cv.cvInRangeS( sat, pixel[1] - lo, pixel[1] + lo, sRange );
  66. cv.cvInRangeS( hue, pixel[0] - lo, pixel[0] + lo, hRange );
  67. mask = sRange * hRange;
  68. hue_roi = cv.cvGetSubRect(hue, comp.rect)
  69. mask_roi = cv.cvGetSubRect(mask, comp.rect)
  70. # it's time to compute the histogram
  71. # cv.cvCalcHist ([hue_roi], hist, 0, mask_roi)
  72. # extract the min and max value of the histogram
  73. # min_val, max_val = cv.cvGetMinMaxHistValue(hist)
  74. # print min_val, max_val;
  75. highgui.cvShowImage('binary', mask );
  76. #cv.cvDrawContours( work, comp.area, red, red, 1);
  77. cv.cvRectangle( work, [comp.rect.x, comp.rect.y], [comp.rect.x + comp.rect.width, comp.rect.y + comp.rect.height], red)
  78. size = cv.cvSize( comp.rect.width, comp.rect.height );
  79. binary = cv.cvCreateImage( size, 8, 1);
  80. active = False;
  81. highgui.cvWaitKey(100)