103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
from opencv.cv import *
 | 
						|
from opencv.highgui import *
 | 
						|
import sys
 | 
						|
 | 
						|
file_name = "../c/baboon.jpg";
 | 
						|
 | 
						|
_brightness = 100
 | 
						|
_contrast = 100
 | 
						|
Gbrightness = 100
 | 
						|
Gcontrast = 100
 | 
						|
 | 
						|
hist_size = 64
 | 
						|
range_0=[0,256]
 | 
						|
ranges = [ range_0 ]
 | 
						|
src_image=None
 | 
						|
dst_image=None
 | 
						|
hist_image=None
 | 
						|
hist=None
 | 
						|
lut=cvCreateMat(256,1,CV_8U)
 | 
						|
 | 
						|
# brightness/contrast callback function
 | 
						|
def update_brightness( val ):
 | 
						|
    global Gbrightness    # global tag is required, or we get UnboundLocalError
 | 
						|
    Gbrightness = val
 | 
						|
    update_brightcont( )
 | 
						|
 | 
						|
def update_contrast( val ):
 | 
						|
    global Gcontrast     # global tag is required, or we get UnboundLocalError
 | 
						|
    Gcontrast = val
 | 
						|
    update_brightcont( )
 | 
						|
 | 
						|
def update_brightcont():
 | 
						|
    # no global tag required for images ???
 | 
						|
 | 
						|
    brightness = Gbrightness - 100;
 | 
						|
    contrast = Gcontrast - 100;
 | 
						|
    max_value = 0;
 | 
						|
 | 
						|
     # The algorithm is by Werner D. Streidt
 | 
						|
     # (http://visca.com/ffactory/archives/5-99/msg00021.html)
 | 
						|
    if( contrast > 0 ):
 | 
						|
        delta = 127.*contrast/100;
 | 
						|
        a = 255./(255. - delta*2);
 | 
						|
        b = a*(brightness - delta);
 | 
						|
    else:
 | 
						|
        delta = -128.*contrast/100;
 | 
						|
        a = (256.-delta*2)/255.;
 | 
						|
        b = a*brightness + delta;
 | 
						|
 | 
						|
    for i in range(256):
 | 
						|
        v = cvRound(a*i + b);
 | 
						|
        if( v < 0 ):
 | 
						|
            v = 0;
 | 
						|
        if( v > 255 ):
 | 
						|
            v = 255;
 | 
						|
        lut[i] = v;
 | 
						|
    
 | 
						|
    cvLUT( src_image, dst_image, lut );
 | 
						|
    cvShowImage( "image", dst_image );
 | 
						|
 | 
						|
    cvCalcHist( dst_image, hist, 0, None );
 | 
						|
    cvZero( dst_image );
 | 
						|
    min_value, max_value = cvGetMinMaxHistValue( hist );
 | 
						|
    cvScale( hist.bins, hist.bins, float(hist_image.height)/max_value, 0 );
 | 
						|
    #cvNormalizeHist( hist, 1000 );
 | 
						|
 | 
						|
    cvSet( hist_image, cvScalarAll(255));
 | 
						|
    bin_w = cvRound(float(hist_image.width)/hist_size);
 | 
						|
 | 
						|
    for i in range(hist_size):
 | 
						|
        cvRectangle( hist_image, cvPoint(i*bin_w, hist_image.height),
 | 
						|
                     cvPoint((i+1)*bin_w, hist_image.height - cvRound(cvGetReal1D(hist.bins,i))),
 | 
						|
                     cvScalarAll(0), -1, 8, 0 );
 | 
						|
   
 | 
						|
    cvShowImage( "histogram", hist_image );
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    # Load the source image. HighGUI use.
 | 
						|
    if len(sys.argv)>1:
 | 
						|
        file_name = sys.argv[1]
 | 
						|
 | 
						|
    src_image = cvLoadImage( file_name, 0 );
 | 
						|
 | 
						|
    if not src_image:
 | 
						|
        print "Image was not loaded.";
 | 
						|
        sys.exit(-1)
 | 
						|
 | 
						|
 | 
						|
    dst_image = cvCloneImage(src_image);
 | 
						|
    hist_image = cvCreateImage(cvSize(320,200), 8, 1);
 | 
						|
    hist = cvCreateHist([hist_size], CV_HIST_ARRAY, ranges, 1);
 | 
						|
 | 
						|
    cvNamedWindow("image", 0);
 | 
						|
    cvNamedWindow("histogram", 0);
 | 
						|
 | 
						|
    cvCreateTrackbar("brightness", "image", _brightness, 200, update_brightness);
 | 
						|
    cvCreateTrackbar("contrast", "image", _contrast, 200, update_contrast);
 | 
						|
 | 
						|
    update_brightcont();
 | 
						|
    cvWaitKey(0);
 |