[파이썬] opencv-python 이미지 히스토그램

이미지 히스토그램은 이미지의 색상 분포를 시각적으로 나타내는 매우 유용한 도구입니다. OpenCV-Python 라이브러리를 사용하면 이미지의 히스토그램을 쉽게 계산하고 시각화할 수 있습니다. 이번 블로그 포스트에서는 OpenCV-Python을 사용하여 이미지 히스토그램을 계산하고 표시하는 방법에 대해 알아보겠습니다.

1. OpenCV-Python 설치

OpenCV-Python을 사용하기 위해서는 먼저 Python 환경에 해당 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install opencv-python

2. 이미지 로드

히스토그램을 계산하기 위해 먼저 이미지를 로드해야 합니다. OpenCV-Python을 사용하여 이미지를 로드하는 방법은 다음과 같습니다.

import cv2

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 이미지 보기
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 히스토그램 계산

이제 이미지를 로드했으니 히스토그램을 계산해보겠습니다. 히스토그램은 픽셀 값의 분포를 나타내는 그래프입니다. OpenCV-Python에서는 cv2.calcHist() 함수를 사용하여 히스토그램을 계산할 수 있습니다.

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 그레이스케일로 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 히스토그램 계산
hist = cv2.calcHist([gray], [0], None, [256], [0,256])

# 히스토그램 그리기
plt.plot(hist)
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()

4. 히스토그램 시각화

히스토그램을 계산한 후에는 시각화하여 결과를 살펴볼 수 있습니다. OpenCV-Python에서는 matplotlib 라이브러리를 사용하여 히스토그램을 그릴 수 있습니다. 위의 코드에서 hist 변수를 사용하여 히스토그램을 그렸습니다.

5. 히스토그램 평활화

히스토그램 평활화는 이미지의 대비를 개선하는 기술로, 히스토그램 분포를 균등하게 만듭니다. OpenCV-Python에서는 cv2.equalizeHist() 함수를 사용하여 히스토그램 평활화를 수행할 수 있습니다.

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 그레이스케일로 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 히스토그램 평활화
equalized = cv2.equalizeHist(gray)

# 평활화된 히스토그램 계산
hist_equalized = cv2.calcHist([equalized], [0], None, [256], [0,256])

# 평활화된 히스토그램 그리기
plt.plot(hist_equalized)
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.title('Histogram (Equalized)')
plt.show()

마무리

이번 블로그 포스트에서는 OpenCV-Python을 사용하여 이미지 히스토그램을 계산하고 시각화하는 방법에 대해 알아보았습니다. 히스토그램을 활용하면 이미지의 색상 분포를 더 잘 이해할 수 있으며, 히스토그램 평활화를 통해 이미지의 대비를 개선할 수 있습니다. OpenCV-Python을 사용하여 이미지 처리 및 분석에 다양한 기능을 쉽고 간편하게 수행할 수 있습니다.

더 많은 OpenCV-Python 기능과 예제 코드는 OpenCV 공식 문서를 참조하시기 바랍니다.