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
반응형
'영상처리' 카테고리의 다른 글
[영상처리] Image Luminosity (밝기)와 Contrast (대조도) - python (구현) (0) | 2022.02.15 |
---|---|
[영상처리] Image Flip (python 직접구현) (0) | 2022.01.21 |
[영상처리] Image Scale (python 직접구현) (0) | 2022.01.20 |
[영상처리] 이미지 색상 표현 (0) | 2022.01.19 |
[영상처리] Image Cropping (python 직접 구현) (0) | 2022.01.18 |