mirror of https://github.com/opencv/opencv.git
#301, sample code for CalcHist
parent
9a342ef337
commit
ac41d29eee
3 changed files with 66 additions and 1 deletions
@ -0,0 +1,53 @@ |
||||
# Calculating and displaying 2D Hue-Saturation histogram of a color image |
||||
|
||||
import sys |
||||
import cv |
||||
|
||||
def hs_histogram(src): |
||||
# Convert to HSV |
||||
hsv = cv.CreateImage(cv.GetSize(src), 8, 3) |
||||
cv.CvtColor(src, hsv, cv.CV_BGR2HSV) |
||||
|
||||
# Extract the H and S planes |
||||
h_plane = cv.CreateMat(src.rows, src.cols, cv.CV_8UC1) |
||||
s_plane = cv.CreateMat(src.rows, src.cols, cv.CV_8UC1) |
||||
cv.Split(hsv, h_plane, s_plane, None, None) |
||||
planes = [h_plane, s_plane] |
||||
|
||||
h_bins = 30 |
||||
s_bins = 32 |
||||
hist_size = [h_bins, s_bins] |
||||
# hue varies from 0 (~0 deg red) to 180 (~360 deg red again */ |
||||
h_ranges = [0, 180] |
||||
# saturation varies from 0 (black-gray-white) to |
||||
# 255 (pure spectrum color) |
||||
s_ranges = [0, 255] |
||||
ranges = [h_ranges, s_ranges] |
||||
scale = 10 |
||||
hist = cv.CreateHist([h_bins, s_bins], cv.CV_HIST_ARRAY, ranges, 1) |
||||
cv.CalcHist([cv.GetImage(i) for i in planes], hist) |
||||
(_, max_value, _, _) = cv.GetMinMaxHistValue(hist) |
||||
|
||||
hist_img = cv.CreateImage((h_bins*scale, s_bins*scale), 8, 3) |
||||
|
||||
for h in range(h_bins): |
||||
for s in range(s_bins): |
||||
bin_val = cv.QueryHistValue_2D(hist, h, s) |
||||
intensity = cv.Round(bin_val * 255 / max_value) |
||||
cv.Rectangle(hist_img, |
||||
(h*scale, s*scale), |
||||
((h+1)*scale - 1, (s+1)*scale - 1), |
||||
cv.RGB(intensity, intensity, intensity), |
||||
cv.CV_FILLED) |
||||
return hist_img |
||||
|
||||
if __name__ == '__main__': |
||||
src = cv.LoadImageM(sys.argv[1]) |
||||
cv.NamedWindow("Source", 1) |
||||
cv.ShowImage("Source", src) |
||||
|
||||
cv.NamedWindow("H-S Histogram", 1) |
||||
cv.ShowImage("H-S Histogram", hs_histogram(src)) |
||||
|
||||
cv.WaitKey(0) |
||||
|
Loading…
Reference in new issue