be63ce723f
updated links in cheatsheet renamed directory for Mat tutorial changed links from willow docs to opencv.itseez.com, from Trac to current Redmine
80 lines
2.6 KiB
Python
Executable File
80 lines
2.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
import cv2.cv as cv
|
|
import sys
|
|
import urllib2
|
|
|
|
hist_size = 64
|
|
range_0 = [0, 256]
|
|
ranges = [ range_0 ]
|
|
|
|
class DemHist:
|
|
|
|
def __init__(self, src_image):
|
|
self.src_image = src_image
|
|
self.dst_image = cv.CloneMat(src_image)
|
|
self.hist_image = cv.CreateImage((320, 200), 8, 1)
|
|
self.hist = cv.CreateHist([hist_size], cv.CV_HIST_ARRAY, ranges, 1)
|
|
|
|
self.brightness = 0
|
|
self.contrast = 0
|
|
|
|
cv.NamedWindow("image", 0)
|
|
cv.NamedWindow("histogram", 0)
|
|
cv.CreateTrackbar("brightness", "image", 100, 200, self.update_brightness)
|
|
cv.CreateTrackbar("contrast", "image", 100, 200, self.update_contrast)
|
|
|
|
self.update_brightcont()
|
|
|
|
def update_brightness(self, val):
|
|
self.brightness = val - 100
|
|
self.update_brightcont()
|
|
|
|
def update_contrast(self, val):
|
|
self.contrast = val - 100
|
|
self.update_brightcont()
|
|
|
|
def update_brightcont(self):
|
|
# The algorithm is by Werner D. Streidt
|
|
# (http://visca.com/ffactory/archives/5-99/msg00021.html)
|
|
|
|
if self.contrast > 0:
|
|
delta = 127. * self.contrast / 100
|
|
a = 255. / (255. - delta * 2)
|
|
b = a * (self.brightness - delta)
|
|
else:
|
|
delta = -128. * self.contrast / 100
|
|
a = (256. - delta * 2) / 255.
|
|
b = a * self.brightness + delta
|
|
|
|
cv.ConvertScale(self.src_image, self.dst_image, a, b)
|
|
cv.ShowImage("image", self.dst_image)
|
|
|
|
cv.CalcArrHist([self.dst_image], self.hist)
|
|
(min_value, max_value, _, _) = cv.GetMinMaxHistValue(self.hist)
|
|
cv.Scale(self.hist.bins, self.hist.bins, float(self.hist_image.height) / max_value, 0)
|
|
|
|
cv.Set(self.hist_image, cv.ScalarAll(255))
|
|
bin_w = round(float(self.hist_image.width) / hist_size)
|
|
|
|
for i in range(hist_size):
|
|
cv.Rectangle(self.hist_image, (int(i * bin_w), self.hist_image.height),
|
|
(int((i + 1) * bin_w), self.hist_image.height - cv.Round(self.hist.bins[i])),
|
|
cv.ScalarAll(0), -1, 8, 0)
|
|
|
|
cv.ShowImage("histogram", self.hist_image)
|
|
|
|
if __name__ == "__main__":
|
|
# Load the source image.
|
|
if len(sys.argv) > 1:
|
|
src_image = cv.GetMat(cv.LoadImage(sys.argv[1], 0))
|
|
else:
|
|
url = 'http://code.opencv.org/svn/opencv/trunk/opencv/samples/c/baboon.jpg'
|
|
filedata = urllib2.urlopen(url).read()
|
|
imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
|
|
cv.SetData(imagefiledata, filedata, len(filedata))
|
|
src_image = cv.DecodeImageM(imagefiledata, 0)
|
|
|
|
dh = DemHist(src_image)
|
|
|
|
cv.WaitKey(0)
|