54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| # Calculating and displaying 2D Hue-Saturation histogram of a color image
 | |
| import sys
 | |
| import cv2.cv as 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)
 | 
