본문 바로가기

Python OpenCV

히스토그램 분석

🙋‍♂️ 오늘은 히스토그램 분석에 대해서 공부한 내용을 정리합니다!

 

 예제 코드 (GrayScale 영상과 Color 영상의 Histogram 생성)

import sys
import numpy as np
import matplotlib.pyplot as plt
import cv2
 
 
# 그레이스케일 영상의 히스토그램
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
 
if src is None:
    print('Image load failed!')
    sys.exit()
 
hist = cv2.calcHist([src], [0], None, [256], [0256])
 
cv2.imshow('src', src)
cv2.waitKey(1)
 
plt.plot(hist)
plt.show()
 
# 컬러 영상의 히스토그램
src = cv2.imread('lenna.bmp')
 
if src is None:
    print('Image load failed!')
    sys.exit()
 
colors = ['b''g''r']
bgr_planes = cv2.split(src)
 
for (p, c) in zip(bgr_planes, colors):
    hist = cv2.calcHist([p], [0], None, [256], [0256])
    plt.plot(hist, color=c)
 
cv2.imshow('src', src)
cv2.waitKey(1)
 
plt.show()
 
cv2.destroyAllWindows()
 
cs

 

🖼️ 결과 이미지

GrayScale 영상인 Lenna.bmp와 Historgram
Color 영상인 Lenna.bmp와 Historgram

 

 예제 코드 (GrayScale 영상과 Historgram, 실제 함수 구현)

 

import sys
import numpy as np
import matplotlib.pyplot as plt
import cv2
 
 
def getGrayHistImage(hist):
    # 255로 채워진 256 x 100의 사이즈인 GrayScale 영상을 만든다.
    imgHist = np.full((100256), 255, dtype=np.uint8)
 
    # 가장 높은 값을 저장한다.
    histMax = np.max(hist)
    for x in range(256):
        pt1 = (x, 100)
        # 가장 높은 임계값의 최대 픽셀 갯수는 100개가 되도록 설정한다.
        pt2 = (x, 100 - int(hist[x, 0* 100 / histMax))
        cv2.line(imgHist, pt1, pt2, 0)
 
    return imgHist
 
 
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
 
if src is None:
    print('Image load failed!')
    sys.exit()
 
hist = cv2.calcHist([src], [0], None, [256], [0256])
histImg = getGrayHistImage(hist)
 
cv2.imshow('src', src)
cv2.imshow('histImg', histImg)
cv2.waitKey()
 
cv2.destroyAllWindows()
 
cs

 

🖼️ 결과 이미지

 

본 학습 내용은 "OpenCV를 활용한 컴퓨터비전과 딥러닝" 을 참고하였음을 알려드립니다.

'Python OpenCV' 카테고리의 다른 글

영상의 이동 변환과 전단 변화  (2) 2024.02.10
특정 색상 영역 추출하기  (0) 2024.02.09
컬러 영상 처리와 색 공간  (0) 2024.02.09
OpenCV 그리기 함수  (0) 2024.02.04
마스크 연산과 ROI  (0) 2024.01.26