히스토그램(Histogram)
- 영상의 픽셀 값 분포를 그래프의 형태로 표현한 것
- 예를 들어 그레이스케일 영상에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고, 이를 막대 그래프의 형태로 표현한 것
정규화된 히스토그램(Normalized histogram)
- 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어준 것
- 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률을 의미한다.
영상과 히스토그램의 관계
히스토그램 구하기 - cv2.calcHist
cv2.calcHist(images,
channels,
mask,
histSize,
ranges,
hist=None,
accumulate=None)
- images : 입력 영상 리스트
- channels : 히스토그램을 구할 채널을 나타내는 리스트
- mask : 마스크 영상 입력
영상 전체에서 히스토그램을 구하려면 None 지정 - histSize : 히스토그램 각 차원의 크기(빈(bin)의 개수)를 나타내는 리스트
- ranges : 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트
- hist : 계산된 히스토그램 (numpy.ndarray)
- accumulate : 기존의 hist 히스토그램에 누적하려면 True, 새로 만들려면 False
💬 실습
import sys
import numpy as np
import matplotlib.pyplot as plt
import cv2
# 그레이스케일 영상의 히스토그램
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
hist = cv2.calcHist([src], [0], None, [256], [0, 256])
cv2.imshow('src', src)
cv2.waitKey(1)
plt.plot(hist)
plt.show()
# 컬러 영상의 히스토그램
src = cv2.imread('lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
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)
cv2.imshow('src', src)
cv2.waitKey(1)
plt.show()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization (0) | 2022.02.01 |
---|---|
[OpenCV with Python] 영상처리 : 명암비 조절 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 컬러 영상과 색 공간 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 영상의 산술 및 논리 연산 (0) | 2022.01.31 |
[OpenCV with Python] 영상처리 : 영상의 밝기 조절 (0) | 2022.01.31 |