/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
- #!/usr/bin/env python
- # from ctypes import sizeof
- # from ctypes_opencv import *
- import time
- import sys
- import random
- from opencv import cv
- from opencv import highgui
- orig_win = highgui.cvNamedWindow('original');
- binary_win = highgui.cvNamedWindow('binary');
- image = highgui.cvLoadImage("frame.jpg", 1);
- work = cv.cvCloneImage( image ); #cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
- tmp = cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
- hsv = cv.cvCreateImage( cv.cvGetSize( image ), 8, 3 );
- hue = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- sat = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- val = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- hRange = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- sRange = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- mask = cv.cvCreateImage( cv.cvGetSize( image ), 8, 1 );
- #IplImage* cvCloneImage( const IplImage* image );
- work = image;
- lastMouseX = 0;
- lastMouseY = 0;
- active = False;
- hdims = 16
- hranges = [[0, 180]]
- hist = cv.cvCreateHist ([hdims], cv.CV_HIST_ARRAY, hranges )
- def mouseHandler( evt, mouseX, mouseY, flags, param ):
- global active, lastMouseX, lastMouseY
- if evt == highgui.CV_EVENT_LBUTTONDOWN:
- lastMouseX = mouseX
- lastMouseY = mouseY;
- active = True;
- highgui.cvSetMouseCallback("original", mouseHandler, None)
- while True:
- highgui.cvShowImage('original', work)
- if not active:
- highgui.cvWaitKey(100)
- continue
- color = cv.CV_RGB(
- random.randint( 0, 255 ),
- random.randint( 0, 255 ),
- random.randint( 0, 255 )
- );
- red = cv.CV_RGB(255, 0, 0);
- comp = cv.CvConnectedComp();
- point = cv.cvPoint( lastMouseX, lastMouseY );
- lo = 50;
- hi = 50;
- flags = 4 + (255 << 8) + cv.CV_FLOODFILL_FIXED_RANGE
- work = cv.cvCloneImage( image );
- cv.cvCvtColor( image, hsv, cv.CV_BGR2HSV)
- pixel = hsv[lastMouseY, lastMouseX];
- cv.cvFloodFill( work, point, color, cv.CV_RGB( lo, lo, lo ), cv.CV_RGB( hi, hi, hi ), comp, flags );
- #hsv_min = cv.cvScalar( pixel[1] - lo, pixel[2] - lo, pixel[3], 0 );
- #hsv_max = cv.cvScalar( pixel[1] + lo, pixel[2] + lo, pixel[3], 0 );
- #print cv.cvInRangeS( hsv, hsv_min, hsv_max, mask );
- #cv.cvInRangeS (hsv, hsv[lastMouseY, lastMouseX][1]-lo, hsv[lastMouseY, lastMouseX][1]-lo, mask)
- # cv.cvInRangeS( hsv, hsv_min, hsv_max, mask );
- #cv.cvSplit (hsv, hue, None, None, None);
- cv.cvSplit(hsv, hue, sat, val, None)
- # cv.cvInRangeS( hue, hLower, hUpper, hueRange );
- print pixel;
- cv.cvInRangeS( sat, pixel[1] - lo, pixel[1] + lo, sRange );
- cv.cvInRangeS( hue, pixel[0] - lo, pixel[0] + lo, hRange );
- mask = sRange * hRange;
- hue_roi = cv.cvGetSubRect(hue, comp.rect)
- mask_roi = cv.cvGetSubRect(mask, comp.rect)
- # it's time to compute the histogram
- # cv.cvCalcHist ([hue_roi], hist, 0, mask_roi)
- # extract the min and max value of the histogram
- # min_val, max_val = cv.cvGetMinMaxHistValue(hist)
- # print min_val, max_val;
- highgui.cvShowImage('binary', mask );
- #cv.cvDrawContours( work, comp.area, red, red, 1);
- cv.cvRectangle( work, [comp.rect.x, comp.rect.y], [comp.rect.x + comp.rect.width, comp.rect.y + comp.rect.height], red)
- size = cv.cvSize( comp.rect.width, comp.rect.height );
- binary = cv.cvCreateImage( size, 8, 1);
- active = False;
- highgui.cvWaitKey(100)