반응형

1. 소스 코드

import os

import cv2

import numpy as np


_MAX_HISTO_ = 256


#히스토그램 계산 함수

def calc_histo(img_src):

    #히스토그램을 누적할 변수 생성

    histo_info = np.zeros(_MAX_HISTO_)


    src_height = img_src.shape[0]

    src_width = img_src.shape[1]


    #히스토그램 계산

    for h in range(src_height):

        for w in range(src_width):

            histo_info[img_src[h,w]] += 1

    return histo_info


#히스토그램 정보를 받아서 히스토그램 이미지를 반환하는 함수

def draw_histo(histo_info):

    #히스토그램을 그릴 공간 생성

    img_histo = np.zeros([256, _MAX_HISTO_], dtype=np.uint8)


    histo_height = img_histo.shape[0]


    max_histo = max(histo_info)


    #히스토그램 그리기(축의 높이를 조절하기 위해 최대값 사용)

    for i in range(_MAX_HISTO_):

        cv2.line(img_histo, (i, histo_height), (i, int(histo_height-histo_info[i]/max_histo*histo_height)), 255, 1)


    return img_histo


#현재 실행되고 있는 경로 값을 얻어서 이미지 경로를 조합

cur_path=os.getcwd() # 현재 경로

img_src='bay.jpg'

img_src_path = os.path.join(cur_path, img_src)


#그레이스케일로 이미지 읽기

img_src = cv2.imread(img_src_path, cv2.IMREAD_GRAYSCALE)


#히스토그램 계산

histo_info_src = calc_histo(img_src)

#히스토그램 그리기

img_histo_src = draw_histo(histo_info_src)


#원본 이미지와 히스토그램 상태 출력

cv2.imshow('src', img_src)

cv2.imshow('histo_src', img_histo_src)

cv2.waitkey()

cv2.destroyAllWindows()



2. 결과




반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기