소스 뷰어
조회수 :   1
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 이미지 로드 (회색조로)
img = cv2.imread("histogram_example.jpg", cv2.IMREAD_GRAYSCALE)

# np.histogram을 사용하여 히스토그램 계산
histogram, bins = np.histogram(img.flatten(), bins=256, range=(0, 255))

# 평균(mean)과 중앙값(median) 계산
mean_val = np.mean(img)
median_val = np.median(img)

# 그래프 설정
rows, cols = 1, 2
plt.figure(figsize=(cols*7, rows*3))

# 원본 이미지 표시
plt.subplot(1, 2, 1)
plt.title('Image')
plt.imshow(img, cmap="gray")
plt.axis("off")

# 히스토그램 Bar Chart 출력
plt.subplot(1, 2, 2)
plt.title('Pixel Histogram')

# np.histogram으로 계산된 hist를 바 차트로 표시
plt.bar(bins[:-1], histogram, width=1, color='blue', label="Pixel count")

# 평균과 중앙값 표시
plt.axvline(mean_val, color='red', linestyle='--', linewidth=1.5, label=f'Mean: {mean_val:.2f}')
plt.axvline(median_val, color='green', linestyle='--', linewidth=1.5, label=f'Median: {median_val:.2f}')

# x, y축 설정
plt.xlabel('Pixel Intensity')
plt.ylabel('Pixel Count')
plt.xlim([0, 255])

# x축 tick을 적당한 간격으로 설정 (예: 0, 25, 50, ..., 255)
tick_values = np.arange(0, 256, 25)
plt.xticks(tick_values, rotation=45)

# y축 tick 포매팅
from matplotlib.ticker import FuncFormatter
plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda value, _: f'{int(value):,}'))

plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)

# 그래프 보여주기
plt.tight_layout()
plt.show()
No description has been provided for this image