반응형

RGB 컬러 영상을 채널별로 구분해 출력하기

github: https://github.com/PSLeon24/Vision-DeepLearning/blob/main/Computer%20vision%20starting%20with%20OpenCV/To%20distinguish%20RGB.ipynb

 

OpenCV는 numpy의 ndarray 클래스로 표현하기 때문에 numpy에 익숙해질 필요가 있다.

따라서 이번 포스팅에서는 RGB 영상의 일부를 잘라내고 RGB 채널로 분리하기 위해 numpy 배열을 다루는 연습을 하고자 한다.

 

original_RGB는 3개의 채널을 가진 원래 영상 img를 윈도우에 디스플레이 한다.

Upper left half는 img의 왼쪽 상단 부분을 잘라내어 윈도우에 디스플레이 한다.

Center half는 img 중간 부분을 잘라내어 윈도우에 디스플레이 한다.

이때, Upper left half와 Center half는 ndarray 클래스의 슬라이싱 기능을 사용해서 이미지의 좌측 상단 영역과 이미지의 중간 영역을 지정했다.

또한 OpenCV는 BGR 순서로 저장하기 때문에 img[:, :, 2]에 R, img[:, :, 1]에 G, img[:, :, 0]에 B가 저장되어 있다.

 

import cv2 as cv
import sys

img = cv.imread('./star.jpeg')

if img is None:
    sys.exit('Failed to find the image file.')
    
cv.imshow('original_RGB', img)
cv.imshow('Upper left half', img[0:img.shape[0]//2, 0:img.shape[1]//2, :])
cv.imshow('Center half', img[img.shape[0]//4:3*img.shape[0]//4, img.shape[1]//4:3*img.shape[1]//4, :])

cv.imshow('R channel', img[:, :, 2])
cv.imshow('G channel', img[:, :, 1])
cv.imshow('B channel', img[:, :, 0])

cv.waitKey()
cv.destroyAllWindows()