GitHub 블로그
유튜브 영상     깃허브 프로필

1 분 소요

[공지사항] 지킬블로그 안내드립니다.

지킬 블로그에 대하여 알아보겠습니다.

버튼입니다

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_rangeshist_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를 사용하여 그래프를 출력합니다.

이 코드는 이미지의 각 컬러 채널에 대한 히스토그램을 계산하고 이를 플롯하는 과정을 포함합니다.

댓글남기기