컬러 영상은 3차원(RGB데이터) numpy.ndarray 로 표현. e.g) img.shape(h, w, 3)
OpenCV에서는 RGB순서가 아니라 BGR 순서를 기본으로 사용(초기 개발시에 BGR 로 시작 되었고 다른 의미는 없다)
img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR)
#imread 메소드를 통하여 lenna.bmp 를 읽는다. IMREAD_COLOR FLAG 는 컬러 영상으로 읽는 다는 의미
img2 = np.zeros((400, 640, 3), np.uint8)
# 3차원의 빈 영상을 만든다는 의미
img3 = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
#imread 메소드를 통하여 lenna.bmp 를 읽지만 IMREAD_GRAYSCALE FLAG 는 8비트 회색조 영상으로 읽는 다는 것을 의미한다.
img4 = cv2.cvtColor(img3, cv2.COLOR_GRAY2BGR)
#cvtColor 메소드는 img3영상을 3차원 영상으로 변환
빛의 삼원색인 빨간색( RED), 녹색(GREEN), 파란색(B)을 혼합하여 색상을 표현(가산 혼합)
TV & 모니터, 카메라 센서 Bayer 필터, 비트맵
색상 채널 분리 예시 코드
cv2.split(m, mvNone) -> dst
m: 다채널 영상 (e.g)(B, G, R)로 구성된 컬러 영상
mv: 출력 영상
dst: 출력 영상의 리스트
색상 채널 결합
cv2.merge(mv, dst=None) -> dst
mv: 입력 영상 리스트 또는 튜플
dst: 출력 영상
color.py
import sys
import numpy as np
import cv2
# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
if src is None:
print('Image load failed!')
sys.exit()
# 컬러 영상 속성 확인
print('src.shape:', src.shape) # src.shape: (480, 640, 3)
print('src.dtype:', src.dtype) # src.dtype: uint8
# RGB 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)
#b_plane = src[:, :, 0]
#g_plane = src[:, :, 1]
#r_plane = src[:, :, 2]
cv2.imshow('src', src)
cv2.imshow('B_plane', b_plane)
cv2.imshow('G_plane', g_plane)
cv2.imshow('R_plane', r_plane)
cv2.waitKey()
cv2.destroyAllWindows()
영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Graysclale 등의 다른 색 공간으로 변환하여 처리
OpenCV 생 공간 변환 방법 : https://docs.opencv.org/master/de/d25/imgproc_color_conversions.html
cv2.cvtColor(src, code, dst=None, dstCn=None) -> dst
장점 : 데이터 저장 용량 감소, 데이터 처리 속도 향상
단점 : 색상 정보 손실
Y = 0.299R + 0.587G + 0.114B
이외에도 HSL, HSI 등 다른 변환도 있고 약간의 수식이 다르다.
영상의 명암비(Contrast) 조절 (0) | 2021.05.25 |
---|---|
히스토그램 분석 (0) | 2021.05.25 |
영상의 논리 연산 (0) | 2021.05.25 |
영상의 산술 연산 (0) | 2021.05.25 |
영상의 화소 처리 방법 (0) | 2021.05.25 |
댓글 영역