히스토그램 이미지 그래프
[공지사항] 지킬블로그 안내드립니다.
지킬 블로그에 대하여 알아보겠습니다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 이미지 읽기
src = cv2.imread("./data/orange1.jpg")
# 히스토그램 계산을 위한 컬러 채널 설정
colors = ('b', 'g', 'r')
channel_ranges = [(0, 256), (0, 256), (0, 256)]
hist_size = 256 # 각 채널의 히스토그램 빈 수
# 서브플롯 설정 (가로 방향으로 3개의 그래프)
fig, axes = plt.subplots(1, 3, figsize=(20, 5))
# 각 채널에 대한 히스토그램 계산 및 플롯팅
for i, (color, hist_range) in enumerate(zip(colors, channel_ranges)):
hist = cv2.calcHist(images=[src], channels=[i], mask=None, histSize=[hist_size], ranges=hist_range)
axes[i].plot(hist, color=color)
axes[i].set_title(f'Color channel: {color}')
axes[i].set_xlim(hist_range)
axes[i].set_xlabel('Pixel value')
axes[i].set_ylabel('Frequency')
# 그래프 출력
plt.tight_layout()
plt.show()
코드가 전반적으로 잘 작성되었지만, 일부 변수 설정이 비정상적일 수 있습니다. 특히 channel_ranges와 hist_sizes의 값이 일반적인 이미지의 픽셀 값 범위(0-255)와는 맞지 않으므로, 히스토그램이 정상적으로 출력되지 않을 수 있습니다.
코드설명
cv2.imread함수를 사용하여 이미지를 읽습니다.colors는 컬러 채널을 나타냅니다.channel_ranges는 각 채널의 픽셀 값 범위를 지정합니다. 일반적으로 0에서 256(픽셀 값 0-255 + 1)으로 설정됩니다.hist_size는 히스토그램의 빈 수를 지정합니다. 여기서는 256으로 설정하여 각 채널의 모든 픽셀 값을 포함하도록 합니다.plt.subplots를 사용하여 3개의 서브플롯을 가로로 배열합니다.- 각 채널에 대해
cv2.calcHist를 사용하여 히스토그램을 계산합니다. axes[i].plot를 사용하여 히스토그램을 플롯합니다.plt.tight_layout를 사용하여 레이아웃을 조정하고plt.show를 사용하여 그래프를 출력합니다.
이 코드는 이미지의 각 컬러 채널에 대한 히스토그램을 계산하고 이를 플롯하는 과정을 포함합니다.
댓글남기기