Algorithm/Image Processing
파이썬에서 RGB 이미지를 Grayscale 이미지로 바꾸기
리미와감자
2022. 9. 2. 00:08
728x90
반응형
라이브러리를 사용하지 않고 직접 알고리즘을 구현해보는 것이 중요하다.
from PIL import Image
import numpy as np
알고리즘 구현에 사용할 라이브러리는 PIL과 numpy이다.
#Option
IMG_FILE = "Girl_with_a_Pearl_Earring.jpg" # Only Use JPG File
SHOW_IMAGE = True
옵션으로 IMG_FILE과 SHOW_IMAGE를 파라미터로 사용한다.
※ 이번 알고리즘에 사용할 이미지는 확장자가 jpg이다. png는 채널이 4개이기 때문에 이번 코드에서는 사용할 수 없다. 4번째 채널은 RGB값이 아니고 알파채널을 의미하는데, 이 값은 단순평균을 낼 때 사용할 수 없다.
img = Image.open(IMG_FILE) # Image File
mode, size = img.mode, img.size # Image Format, Size
width, height = size[0], size[1]
pix = list(img.getdata())
이미지를 불러오는 코드이다.
우선 이미지를 불러와서 변수 img에 저장한다.
Format과 Size는 언제 사용할지 모르니 일단 저장해둔다.
이미지의 width(가로)와 height(세로)도 중요하다.
이미지의 픽셀값을 리스트에 넣는다.
#Convert RGB images to Gray Scale
gray_pix = []
for i in pix:
gray_val = round(np.mean(i))
gray_pix.append(gray_val)
gray_pix = np.array(gray_pix)
gray_pix = gray_pix.reshape(height, width)
gray_img = Image.fromarray(gray_pix)
gray_val = round(np.mean(i)) : RGB값의 평균을 낸후 반올림한다. 반올림 하는 이유는 소수값을 없애기 위해서이다.
나머지 코드는 list에서 array로 변환 후 사이즈를 맞춰주고 array에서 이미지로 변환하는 코드이다.
img.show()
img.close()
마지막으로 이미지를 띄운다.
## 전체 코드
from PIL import Image
import numpy as np
#Option
IMG_FILE = "Girl_with_a_Pearl_Earring.jpg" # Only Use JPG File
SHOW_IMAGE = True
#############################################################################
#############################################################################
#Import Image
img = Image.open(IMG_FILE) # Image File
mode, size = img.mode, img.size # Image Format, Size
width, height = size[0], size[1]
pix = list(img.getdata())
#Convert RGB images to Gray Scale
gray_pix = []
for i in pix:
gray_val = round(np.mean(i))
gray_pix.append(gray_val)
gray_pix = np.array(gray_pix)
gray_pix = gray_pix.reshape(height, width)
gray_img = Image.fromarray(gray_pix)
#Show Image
if SHOW_IMAGE :
img.show()
img.close()
gray_img.show()
gray_img.close()
## 결과
## 라이브러리를 바로 사용한 코드
from PIL import Image
import numpy as np
#Option
IMG_FILE = "Girl_with_a_Pearl_Earring.jpg" # Only Use JPG File
SHOW_IMAGE = True
#############################################################################
#############################################################################
#Import Image
img = Image.open(IMG_FILE) # Image File
img_Gray = img.convert('L')
img_Gray.show()
사실 코드 3줄이면 Grayscale로 변환 가능하다.
728x90
반응형