히스토그램 : 영상의 픽셀값 분포를 그래프의 형태로 표현한 것
cv2.calcHist(images, channel, mask, histSize, ranges [, hist [, accumulate]]) [] : 생략 가능
images : 입력 영상 - 리스트 형식[]
channels : 히스토그램 구할 채널을 나타내는 리스트 [0], [0,1], [0,1,2]
GRAYSCALE 영상에선 [0]
BGR 영상에선 [0] : B, [1] : G, [2] : R 이 되겠네요
mask : 마스크 영상, 입력 영상 전체에 히스토그램 구하려면 None
histSize : 히스토그램 각 차원의 크기를 나타내는 리스트
64로 하면 0~3, 4~7 이런 식으로 4개씩 묶여 64개
128로 하면 0~1, 2~3 이런 식으로 2개씩 묶여 128개로 표현됩니다.
ranges : 히스토그램 각 차원의 최솟값, 최댓값으로 구성된 리스트
hist : 계산된 히스토그램(numpy.ndarray)
accumulate : 기존의 hist 히스토그램에 누적하려면 True, 새로 만들려면 False
import cv2
import matplotlib.pyplot as plt
src = cv2.imread('imgs/dog.jpg', cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist([src], [0], None, [
256], [0, 256])
cv2.imshow('src', src)
cv2.waitKey(1)
plt.plot(hist)
plt.show()
cv2.destroyAllWindows()
사진이 여러개일 때 리스트 형식으로 묶어주세요
img = [src1, src2]
for i in img:
hist = cv2.calcHist([i], [0], None, [
256], [0, 256])
plt.plot(hist)
import cv2
import matplotlib.pyplot as plt
src1 = cv2.imread('imgs/dog.jpg')
color = ['b', 'g', 'r']
channel = cv2.split(src1)
for (i, j) in zip(channel, color):
hist = cv2.calcHist([i], [0], None, [
256], [0, 256])
plt.plot(hist, color=j)
cv2.imshow('src1', src1)
cv2.waitKey(1)
plt.show()
cv2.destroyAllWindows()
컬러 영상에선 cv2.split을 통해서 채널을 분할하여 각 채널을 표현했습니다.
cv2.split 함수는 채널을 분리하는 함수로 b, g, r 채널을 리스트 형식으로 분리합니다.
※ 혹시나 No module named 'matplotlib' 오류가 나타난다면 pip install matplotlib으로 설치해주세요
'OpenCV-Python' 카테고리의 다른 글
OpenCV Python 히스토그램 평활화 (0) | 2021.08.30 |
---|---|
OpenCV Python 영상 명암비 조절(정규화) (0) | 2021.08.29 |
OpenCV Python 영상에서의 연산(+밝기 조절, 차이 확인) (0) | 2021.08.27 |
OpenCV Python 연산 시간 측정 (0) | 2021.08.25 |
OpenCV Python 선, 도형, 문자열 출력 (0) | 2021.08.24 |