Skip to content

Cv2.calcHist

Histogram은 이미지의 밝기의 분포를 그래프로 표현한 방식입니다.

About Histogram

히스토그램을 이용하면 이미지의 전체의 밝기 분포와 채도(색의 밝고 어두움)를 알 수 있습니다.

Cambridgeincolor_in_Color.jpg

위 그림의 아래 그래프를 보면 X축이 색의 강도(0 ~ 255), Y축이 X축에 해당하는 색의 갯수 입니다. 그래프만 보면 이미지 밝기의 분포가 중간값은 거의 없고, 어둡고 밝은 색 분포가 많다는 것을 알 수 있습니다. 실제 원본 이미지를 보면 그래프만 보고 분석한 결과와 유사합니다.

BINS

히스토그램 그래프의 X축의 간격입니다. 위 그림의 경우에는 0 ~ 255를 표현하였기 때문에 BINS값은 256이 됩니다. BINS값이 16이면 0 ~ 15, 16 ~ 31..., 240 ~ 255와 같이 X축이 16개로 표현이 됩니다. OpenCV에서는 BINS를 histSize 라고 표현합니다.

Synopsis

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

Parameters:

  • image – 분석대상 이미지(uint8 or float32 type). Array형태.
  • channels – 분석 채널(X축의 대상). 이미지가 graysacle이면 [0], color 이미지이면 [0],[0,1] 형태(1 : Blue, 2: Green, 3: Red)
  • mask – 이미지의 분석영역. None이면 전체 영역.
  • histSize – #BINS 값. [256]
  • ranges – Range값. [0,256]

HSV Example

roi = frame[y:y+h, x:x+w]
roi_hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

channels = [0, 1]  # 분석할 채널 Index. HSV 에서 [0, 1] 이면 H 와 S 채널 이다.
hist_size = [90, 128]  # 히스토그램 x축 간격
ranges = [0, 180, 0, 256]  # 측정하고자하는 값의 범위. 즉, 여기선 채널당 값의 범위 OpenCV 의 cv2.cvtColor 로 넘어오 H 는 0~179, S 는 0~255 이다.
hist = cv2.calcHist([roi_hsv], channels, None, hist_size, ranges)

See also

Favorite site