퐈니썬's LIfe - 잘 실패하자 RSS 태그 관리 글쓰기 방명록
컬러맵 (1)
2022-01-17 21:58:35
728x90
반응형

<Introduction>

입력 이미지를 그레이 스케일 이미지로 변환하는 내용을 python으로 직접 구현하고자 합니다. 

opencv 라이브러리를 통해 간단하게 진행이 가능하지만, 전반적인 이미지 처리에 대한 이해를 다지고자 작성하였습니다. 

 

 

 

<RGB -> Grayscale>

입력 이미지는 RGB로 구성된 이미지를 적용할 것입니다.

RGB로 구성된 이미지를 Grayscale로 바꾸기 위해서는 색상 채널을 변경해야 합니다.

즉, N x N x 3 으로 구성된 이미지를 N x N x 1로 표현해야 할 것입니다.

 

그러기 위해서는 한 픽셀에 대해 가지고 있는 RGB 색상을 평균하여 하나의 값으로 만들어 주어 다시 값을 입력하면 됩니다. 

 

 

<구현>

import numpy as np
import cv2

#load image
img = cv2.imread('./Image01.png')
print(f"image shape: {img.shape} \n data type: {img.dtype}\n")
#view image
cv2.imshow('original image',img)
cv2.waitKey(0)
#get original image attribute
height = img.shape[0]
width = img.shape[1]
#create target array for gray scale
gray_image = np.zeros((height, width, 1), dtype=np.uint8)

print("converting...\n")

# 입력 이미지의 pixel 값 하나씩 불러서 변경
for h in range(height):
    for w in range(width):
        b = img[h, w, 0].astype(np.float32) # RGB의 Blue 값 입력받기
        g = img[h, w, 1].astype(np.float32) # RGB의 Green 값 입력받기
        r = img[h, w, 2].astype(np.float32) # RGB의 Red 값 입력받기

        intensity = (b+g+r)/3               # RGB 채널의 값을 하나의 값으로 평균 내기
        gray_image[h, w, 0] = intensity     # target array에 값 저장
        
print("done")
cv2.imshow("converted grayimage", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

<결과>

<입력 이미지>

 

 

<출력 이미지>

 

728x90
반응형