반응형
opencv2를 이용하여 이미지 색상 히스토그램 구하기
히스토그램이란?
픽셀 값 분포를 그래프형식으로 표현한 것이다. 히스토그램을 통해서 이미지의 밝기나 명암비를 분석할 수 있다.
이런 꼴을 가지는데, x축은 픽셀의 명암값 y축은 픽셀의 갯수를 나타낸다.
위 이미지에서 numpy(plt)를 활용한 방법, cv2를 활용한 방법 두가지로 이미지의 색상 히스토그램을 구해보겠다.
히스토그램 그리기
1) cv2 히스토그램
cv2를 활용하여 각 color scale(gray는 grayscale)에 해당하는 픽셀의 갯수를 구하고 막대 그래프 형태로 표현하면, 아래와 같은 결과가 나온다.
import matplotlib.pyplot as plt
import cv2
####### gray scale
gray = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)
#gray = cv2.resize(gray, dsize=(0,0), fx = 0.1, fy = 0.1)
hist = cv2.calcHist([gray],[0],None,[256],[0,256])
plt.xlim([0,256])
plt.plot(hist)
######## rgb channel
origin = cv2.imread('cat.jpg',cv2.IMREAD_COLOR)
origin = cv2.resize(origin, dsize=(0,0), fx = 0.1, fy = 0.1)
color = ['b','g','r']
for i in range(3): # b,g,r
hist = cv2.calcHist([origin],[i],None,[256],[0,256])
plt.plot(hist, c=color[i], label = color[i])
plt.xlim([0,256])
plt.legend()
plt.show()
2) numpy 히스토그램
plt를 사용하면 더 간단히 구할 수 있다.
plt.hist(gray.ravel(), 256, [0,256]);
plt.show()
밝기에 따른 히스토그램 비교하기
같은 이미지에서, 밝기가 다를 때 히스토그램이 어떻게 변화하는지 알아보겠다.
import matplotlib.pyplot as plt
import cv2
gray = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)
gray = cv2.resize(gray, dsize=(0,0), fx = 0.1, fy = 0.1)
img1 = cv2.add(gray,-20)
img3 = cv2.add(gray,20)
img_list = [img1, gray, img3]
name = ['dark', 'origin', 'light']
for i in range(3):
hist = cv2.calcHist([img_list[i]],[0],None,[256],[0,256])
plt.plot(hist, label = name[i])
# plt.xlim([0,256])
plt.legend()
plt.show()
이처럼 이미지가 밝을수록 오른쪽으로 치우치는 것을 확인할 수 있다.
반응형
'이미지 처리' 카테고리의 다른 글
[opencv]cv2 이미지 특정 색만 추출하는 방법 정리 (0) | 2023.04.29 |
---|