"atomic bomb" commit. Reorganized OpenCV directory structure
This commit is contained in:
102
samples/swig_python/demhist.py
Executable file
102
samples/swig_python/demhist.py
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/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);
|
Reference in New Issue
Block a user