상세 컨텐츠

본문 제목

히스토그램 분석

영상처리/OpenCV Python

by cepiloth 2021. 5. 25. 10:45

본문

728x90
반응형

히스토그램(Histogram)

영상의 픽셀 값 분포를 그래프의 형태로 표현한 것 예를 들어 그레이스케일 영상에서 각 그레이스케일 값에 해당 하는 픽셀의 개수를 구하고, 이를 막대 그래프의 형태로 표현

 

히스토그램 정규화

정규화된 히스토그램(Normalized histogram) : 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어준 것 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률

 

영상과 히스토그램의 관계 영상에서 픽셀의 분포를 확인 할 수 있다.

 

아래 레나 이미지를 확인 하게 되면은 영상내의 히스토그램 분포에 따른 영상의 출력을 확인 할 수 있다.

 

#OpenCV 히스토그램 구하기
/*
images: 입력 영상 리스트
channels: 히스토그램을 구할 채널을 나타내는 리스트
mask : 마스크 영상, 입력 영상 전체에서 히스토그램을 구하려면 None 지정
histSize : 히스토그램 각 차아원의 크기(빈(bin)ㅇ의 개수)를 나타내는 리스트
ranges : 히스토그램 각 차원의 최솟값과 최대값으로 구성된 리스트
hist : 계산된 히스토그램 (numpy.ndarry)
accumulate : 기존의 hist 히스토그램에 누적하려면 True, 새로 만들려면 False
*/
cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, accmulator=None) -> hist

 

histogram1.py 예제 코드

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], [0, 256])

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], [0, 256])
    plt.plot(hist, color=c)

cv2.imshow('src', src)
cv2.waitKey(1)

plt.show()

cv2.destroyAllWindows()

 

728x90
반응형

'영상처리 > OpenCV Python' 카테고리의 다른 글

히스토그램 스트레칭(Histogram stretching)  (0) 2021.05.25
영상의 명암비(Contrast) 조절  (0) 2021.05.25
컬러 영상과 색 공간  (0) 2021.05.25
영상의 논리 연산  (0) 2021.05.25
영상의 산술 연산  (0) 2021.05.25

관련글 더보기

댓글 영역