티스토리 뷰

반응형
[영상처리] Histogram(OpenCV-python)

히스토그램이란?

히스토그램이란 뭐가 몇 개 있는지 개수를 세어 놓은 것을 그림으로 표시한 것을 말한다. 히스토그램은 영상을 분석하는데 유용하다.

opencv python 코드

cv2.calcHist 함수로 쉽게 영상의 히스토그램을 확인할 수 있다.

cv2.calcHist(imageschannelsmaskhistSizeranges[, 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]

grayscale 이미지

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('imgs/mountain.jpg', cv2.IMREAD_GRAYSCALE)

hist = cv2.calcHist([img], [0], None, [256], [0, 256])
plt.plot(hist)
plt.show()

왼쪽의 grayscale 이미지를 histogram 을 나타낸 것이 오른쪽 그래프다. 110~120정도의 값을 갖는 픽셀의 개수가 가장 많다는 것을 확인할 수 있다.

rgb 이미지

위의 샘플은 rgb영상을 일부러 grayscale로 불러서 확인했다. 이번엔 rgb 영상의 각 채널에 대한 히스토그램을 확인해본다. cv2.split() 함수를 이용해 채널 별로 분리하고 반복문을 통해 각 색상 별 그래프를 plot한다.

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('imgs/mountain.jpg')

channels = cv2.split(img)
colors = ['b', 'g', 'r']
for ch, color in zip(channels, colors):
    hist = cv2.calcHist([ch], [0], None, [256], [0, 256])
    plt.plot(hist, color=color)
plt.show()

참고자료

[도서] 파이썬으로 만드는 OpenCV 프로젝트

[OpenCV] 공식자료

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday