안 쓰던 블로그

OpenCV를 활용한 이미지 처리 본문

머신러닝/머신러닝

OpenCV를 활용한 이미지 처리

proqk 2021. 1. 17. 21:00
반응형

OpenCV의 imread()이용한 이미지 로딩 시 주의할 점

OpenCV에서 이미지 로딩은 imread(‘파일명’)을 이용, imread(‘파일명’)은 파일을 읽어 넘파이 array로 변환

근데 OpenCV가 이미지를 RGB 형태가 아닌 BGR 형태로 로딩하기 때문에 색감이 원본 이미지와 다르게 나타난다(원본이 붉은 계열이면 퍼렇게 나옴)

bgr_img_array = cv2.imread(‘파일명’)
rgb_img_array = cv2.cvtColor(bgr_img_array, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_img_array)

다음 코드처럼 BGR을 RGB로 바꿔주어야 한다(BGR2RGB)

 

imwrite()를 이용하여 파일에 쓰기

OpenCV에서 메모리에 있는 이미지 배열을 다시 파일에 저장하려면 imwrite(‘출력파일명‘, 이미지배열)을 이용

imwrite는 BGR형태로 되어 있는 이미지 배열을 다시 RGB 형태로 변환하여 저장한다

따라서 imread( )로 읽고, imwrite( )로 출력한 이미지 파일은 다시 RGB 형태의 파일이 됨

 

주피터 노트북에서의 OpenCV Windows Frame 인터페이스 주의할 점

cv2.imshow(이미지 array)는 이미지 배열을 window frame에 보여줌

cv2.waitKey() : 키보드 입력이 있을 때까지 무한 대기

cv2.destroyAllWindows(): 화면의 윈도우 프레임 모두 종료 주피터 노트북 기반에서는 이미지 배열의 시각화에 matplotlib을 사용

 

전부 Window Frame과 인터페이스 하는 기능인데, Window Frame 생성이 가능한 GUI 개발 환경에서만 가능하고 주피터 노트북에서는 오류가 발생한다

->대신 matplotlib 이용


패키지별 이미지 로딩 비교

[PIL 패키지]

import matplotlib.pyplot as plt
import os
%matplotlib inline

from PIL import Image

default_dir = '/content/DLCV'
pil_image = Image.open(os.path.join(default_dir, "data/image/beatles01.jpg"))
print('image type:', type(pil_image))

plt.figure(figsize=(10, 10))
plt.imshow(pil_image)

 

[사이킷이미지]

from skimage import io

#skimage는 imread()를 이용하여 image를 numpy 배열로 반환
sk_image = io.imread(os.path.join(default_dir, "data/image/beatles01.jpg"))
print('sk_image type:', type(sk_image), ' sk_image shape:', sk_image.shape)

plt.figure(figsize=(10, 10))
plt.imshow(sk_image)

 

[openCV]

import cv2

#OpenCV는 imread()를 이용하여 원본 RGB 이미지를 BGR 형태의 넘파이 배열로 반환
cv2_image = cv2.imread(os.path.join(default_dir, "data/image/beatles01.jpg"))
#imwrite()를 이용하면 다시 RGB로 바꿔주기 때문에 RGB->BGR->RGB 신경쓰지 않아도 된다
cv2.imwrite(os.path.join(default_dir, "data/output/beatles02_cv.jpg"), cv2_image)
print('cv_image type:', type(cv2_image), ' cv_image shape:', cv2_image.shape)

plt.figure(figsize=(10, 10))
img = plt.imread(os.path.join(default_dir, "data/output/beatles02_cv.jpg"))
plt.imshow(img)

imwrite를 쓴다면 RGB가 된다

 

cv2_image = cv2.imread(os.path.join(default_dir, "data/image/beatles01.jpg"))
draw_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB)

plt.figure(figsize=(10, 10))
plt.imshow(draw_image)
plt.show()

그렇지 않다면 BGR2RGB로 변환해 준다

반응형
Comments