Koo's.Co

[OpenCV] 영상출력하기 본문

Python/영상처리

[OpenCV] 영상출력하기

kth321 2020. 9. 14. 00:05

영상은 색을 갖는지 색을 갖지 않는지에 따라 트루컬러와 그레이스케일 두 가지로 나뉜다.

 

 

이전 글을 확인하면 둘의 차이를 비교할 수 있다

 

영상의 표현 방법 (그레이 스케일, 트루 컬러)

1. 그레이 스케일 영상 별도의 색상 정보 없이 밝기로 구분한다 0~255, 총 256단계의 밝기 정보를 갖는다 0은 검정색을, 255는 흰색을 나타낸다 픽셀 당 1Byte C/C++ : unsigned char Python : numpy.uint8 2. 트..

koosco.tistory.com

 

OpenCV에서는 imread 함수를 사용할 때, 플래그를 이용해 트루컬러와 그레이스케일 영상을 쉽게 불러올 수 있다.

 

1. 그레이스케일

import cv2

img = cv2.imread('Lenna.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

그레이스케일 이미지는 imread함수를 쓸 때, 이미지의 이름 뒤에 cv2.IMREAD_GRAYSCALE 플래그를 사용해 표현할 수 있다. 불러온 이미지가 트루컬러 이미지이면 자동으로 그레이스케일 영상으로 변환된다.

 

불러온 영상에 대한 shape정보를 출력해보자

print(img.shape)

그레이스케일 영상은 가로, 세로 길이 두 개만 저장하고 있는다. (따로 컬러 차원이 존재하지 않는다)

 

2. 트루컬러

img = cv2.imread('Lenna.png', cv2.IMREAD_COLOR)

위 코드에서 플래그만 cv2.IMREAD_COLOR로 변경해주면 트루컬러로 이미지를 불러올 수 있다.

마찬가지로 영상의 shape정보를 출력해보자

트루 컬러 영상은 RGB 각 색에 대한 채널 정보가 저장된다. 다음 그림처럼 각 차원은 해당 색에 대한 정보만을 갖고 세 영역의 색상 값들이 조합되어 색을 표현하게 된다

 

3. cv2.IMREAD_UNCHANGED

cv2.IMREAD_COLOR를 사용하면 불러온 이미지를 RGB 3가지 색 채널로 한정해버린다. PNG 파일처럼 별도로 알파채널(투명도)를 갖는 영상은 cv2.IMREAD_COLOR를 사용하면 알파 채널을 나타내지 못한다. 이때는 cv2.IMREAD_UNCHANGED를 사용해 원본영상 그대로 불러올 수 있다.

 

격자 모양의 배경을 갖는 이미지는 알파채널을 포함한다. 알파채널을 포함하는 이미지는 RGB + 알파채널로 총 4개의 차원을 갖는다.

 

import cv2

img = cv2.imread('opencv.png', cv2.IMREAD_UNCHANGED)
print(img.shape)

알파채널을 갖는 이미지를 불러와 shape을 확인하면 총 4개의 채널을 확인할 수 있다.

0123
BGR+A(Alpha) 순서

그러므로 RGB의 색상 정보 이외 정보까지 사용할 때는 cv2.IMREAD_UNCHANGED를 사용해 이미지를 불러와야 한다.

 

Comments