X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=samples%2Fpython%2Fcam-histo.py;fp=samples%2Fpython%2Fcam-histo.py;h=0000000000000000000000000000000000000000;hb=e4c14cdbdf2fe805e79cd96ded236f57e7b89060;hp=78e7e8470f17fa0cd066c8fa606c568203e5ff00;hpb=454138ff8a20f6edb9b65a910101403d8b520643;p=opencv diff --git a/samples/python/cam-histo.py b/samples/python/cam-histo.py deleted file mode 100755 index 78e7e84..0000000 --- a/samples/python/cam-histo.py +++ /dev/null @@ -1,193 +0,0 @@ -#! /usr/bin/env python - -import sys - -# import the necessary things for OpenCV -from opencv import cv -from opencv import highgui - -############################################################################# -# definition of some constants - -# how many bins we want for the histogram, and their ranges -hdims = 16 -hranges = [[0, 180]] - -# ranges for the limitation of the histogram -vmin = 10 -vmax = 256 -smin = 30 - -# the range we want to monitor -hsv_min = cv.cvScalar (0, smin, vmin, 0) -hsv_max = cv.cvScalar (180, 256, vmax, 0) - -############################################################################# -# some useful functions - -def hsv2rgb (hue): - # convert the hue value to the corresponding rgb value - - sector_data = [[0, 2, 1], - [1, 2, 0], - [1, 0, 2], - [2, 0, 1], - [2, 1, 0], - [0, 1, 2]] - hue *= 0.1 / 3 - sector = cv.cvFloor (hue) - p = cv.cvRound (255 * (hue - sector)) - if sector & 1: - p ^= 255 - - rgb = {} - rgb [sector_data [sector][0]] = 255 - rgb [sector_data [sector][1]] = 0 - rgb [sector_data [sector][2]] = p - - return cv.cvScalar (rgb [2], rgb [1], rgb [0], 0) - -############################################################################# -# so, here is the main part of the program - -if __name__ == '__main__': - - # a small welcome - print "OpenCV Python wrapper test" - print "OpenCV version: %s (%d, %d, %d)" % (cv.CV_VERSION, - cv.CV_MAJOR_VERSION, - cv.CV_MINOR_VERSION, - cv.CV_SUBMINOR_VERSION) - - # first, create the necessary windows - highgui.cvNamedWindow ('Camera', highgui.CV_WINDOW_AUTOSIZE) - highgui.cvNamedWindow ('Histogram', highgui.CV_WINDOW_AUTOSIZE) - - # move the new window to a better place - highgui.cvMoveWindow ('Camera', 10, 40) - highgui.cvMoveWindow ('Histogram', 10, 270) - - try: - # try to get the device number from the command line - device = int (sys.argv [1]) - - # got it ! so remove it from the arguments - del sys.argv [1] - except (IndexError, ValueError): - # no device number on the command line, assume we want the 1st device - device = 0 - - if len (sys.argv) == 1: - # no argument on the command line, try to use the camera - capture = highgui.cvCreateCameraCapture (device) - - # set the wanted image size from the camera - highgui.cvSetCaptureProperty (capture, - highgui.CV_CAP_PROP_FRAME_WIDTH, 320) - highgui.cvSetCaptureProperty (capture, - highgui.CV_CAP_PROP_FRAME_HEIGHT, 240) - else: - # we have an argument on the command line, - # we can assume this is a file name, so open it - capture = highgui.cvCreateFileCapture (sys.argv [1]) - - # check that capture device is OK - if not capture: - print "Error opening capture device" - sys.exit (1) - - # create an image to put in the histogram - histimg = cv.cvCreateImage (cv.cvSize (320,240), 8, 3) - - # init the image of the histogram to black - cv.cvSetZero (histimg) - - # capture the 1st frame to get some propertie on it - frame = highgui.cvQueryFrame (capture) - - # get some properties of the frame - frame_size = cv.cvGetSize (frame) - - # compute which selection of the frame we want to monitor - selection = cv.cvRect (0, 0, frame.width, frame.height) - - # create some images usefull later - hue = cv.cvCreateImage (frame_size, 8, 1) - mask = cv.cvCreateImage (frame_size, 8, 1) - hsv = cv.cvCreateImage (frame_size, 8, 3 ) - - # create the histogram - hist = cv.cvCreateHist ([hdims], cv.CV_HIST_ARRAY, hranges, 1) - - while 1: - # do forever - - # 1. capture the current image - frame = highgui.cvQueryFrame (capture) - if frame is None: - # no image captured... end the processing - break - - # mirror the captured image - cv.cvFlip (frame, None, 1) - - # compute the hsv version of the image - cv.cvCvtColor (frame, hsv, cv.CV_BGR2HSV) - - # compute which pixels are in the wanted range - cv.cvInRangeS (hsv, hsv_min, hsv_max, mask) - - # extract the hue from the hsv array - cv.cvSplit (hsv, hue, None, None, None) - - # select the rectangle of interest in the hue/mask arrays - hue_roi = cv.cvGetSubRect (hue, selection) - mask_roi = cv.cvGetSubRect (mask, selection) - - # 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, min_idx, max_idx = cv.cvGetMinMaxHistValue (hist) - - # compute the scale factor - if max_val > 0: - scale = 255. / max_val - else: - scale = 0. - - # scale the histograms - cv.cvConvertScale (hist.bins, hist.bins, scale, 0) - - # clear the histogram image - cv.cvSetZero (histimg) - - # compute the width for each bin do display - bin_w = histimg.width / hdims - - for i in range (hdims): - # for all the bins - - # get the value, and scale to the size of the hist image - val = cv.cvRound (cv.cvGetReal1D (hist.bins, i) - * histimg.height / 255) - - # compute the color - color = hsv2rgb (i * 180. / hdims) - - # draw the rectangle in the wanted color - cv.cvRectangle (histimg, - cv.cvPoint (i * bin_w, histimg.height), - cv.cvPoint ((i + 1) * bin_w, histimg.height - val), - color, -1, 8, 0) - - # we can now display the images - highgui.cvShowImage ('Camera', frame) - highgui.cvShowImage ('Histogram', histimg) - - # handle events - k = highgui.cvWaitKey (10) - - if k == '\x1b': - # user has press the ESC key, so exit - break