히스토그램(Histogram)
- 영상의 픽셀 값 분포를 그래프로 표현
정규화된 히스토그램(Normalized histogram)
- 각 픽셀의 개수를 영상 전체 픽셀 개수로 나눠줌
해당 그레이스케일 값을 갖는 픽셀이 나타날 확률
cv2.calcHist(images, channels, mask, histSize, ranges, hist=None,
accumulate=None) -> hist
- images: 입력 영상 리스트
- channels: 히스토그램을 구할 채널 나타내는 리스트
- mask: 마스크 영상, 입력 영상 전체에서 히스토그램 구하면 None지정
- histSize: 히스토그램 각 차원의 크기를 나타내는 리스트
- ranges: 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트
- hist: 계산된 히스토그램(numpy.ndarray)
- accumulate: 기존의 hist 히스토그램 누적하면 True, 새로 만들면 False
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist([src], [0], None, [256], [0, 256])
plt.plot(hist)
plt.show()
src = cv2.imread('lenna.bmp')
colors = ['b', 'g', 'r']
bgr_planes = cv2.split(src)
for (p, c) in zip(bgr_planes, colors):
hist = cv2.calcHist([p], [0], None, [256], [0, 256])
plt.plot(hist, color=c)
plt.show()
def getGrayHistImage(hist):
imgHist = np.full((100, 256), 255, dtype=np.uint8)
histMax = np.max(hist)
for x in range(256):
pt1 = (x, 100)
pt2 = (x, 100 - int(hist[x, 0] * 100 / histMax))
cv2.line(imgHist, pt1, pt2, 0)
return imgHist
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist([src], [0], None, [256], [0, 256])
histImg = getGrayHistImage(hist)