Python OpenCV 강좌 : 제 17강 - 채널 분리 & 병합

Python OpenCV Split & Merge

Python OpenCV 강좌 : 제 17강 - 채널 분리 & 병합
[ Python-OpenCV ] - 윤대희

채널 분리(Split) 및 병합(Merge)


1

채널 분리(Split)병합(Merge)은 영상이나 이미지의 색상 공간의 채널을 분리하거나 합치기 위해 사용합니다.

예를 들어, BGR 색상 공간을 B(Blue), G(Green), R(Red)로 분리해 단일 채널을 가진 배열로 반환할 수 있습니다.

분리된 채널의 값을 변경하거나 순서를 변경해, GB(R/2) 공간을 만들거나 새로운 색상 공간으로 변경할 수도 있습니다.


  • Tip : OpenCV의 가산 혼합의 삼원색 기본 배열순서BGR입니다.



Main Code


import cv2

src = cv2.imread("Image/tomato.jpg", cv2.IMREAD_COLOR)
b, g, r = cv2.split(src)
inverse = cv2.merge((r, g, b))

cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
cv2.imshow("inverse", inverse)
cv2.waitKey()
cv2.destroyAllWindows()



Detailed Code


b, g, r = cv2.split(src)

채널 분리 함수(cv2.split)로 이미지에서 채널을 분리할 수 있습니다.

mv = cv2.split(src)입력 이미지(src)에서 채널을 분리해 단일 채널 이미지 배열(mv)을 생성합니다.

mv목록(list) 형식으로 반환되며, b, g, r 등으로 형태로 각 목록의 원솟값을 변수로 지정할 수 있습니다.

분리된 채널의 순서에 맞게 각 변수에 할당됩니다.


  • Tip : 분리된 채널들은 단일 채널이므로 흑백 색상으로 표현됩니다.



inverse = cv2.merge((r, g, b))

채널 병합 함수(cv2.merge)로 분리된 채널을 병합해 하나의 이미지로 합칠 수 있습니다.

dst = cv2.merge(mv)단일 채널 이미지 배열(mv)를 병합해 출력 이미지(dst)를 생성합니다.

채널을 변형한 뒤에 다시 합치거나 순서를 변경해 병합할 수 있습니다.

순서가 변경될 경우, 원본 이미지와 다른 색상으로 표현될 수 있습니다.



Additional Information


numpy 형식 채널 분리

b = src[:, :, 0]
g = src[:, :, 1]
r = src[:, :, 2]

이미지[높이, 너비, 채널]을 이용하여 특정 영역특정 채널만 불러올 수 있습니다.

:, :, n을 입력할 경우, 이미지 높이와 너비를 그대로 반환하고 n번째 채널만 반환하여 적용합니다.


  • Tip : src[..., n]의 형태로도 사용할 수 있습니다.



빈 이미지

height, width, channel = src.shape
zero = np.zeros((height, width, 1), dtype=np.uint8)
bgz = cv2.merge((b, g, zero))

검은색 빈 공간 이미지가 필요할 때는 np.zeros((높이, 너비, 채널), dtype=정밀도)을 이용해 빈 이미지를 생성할 수 있습니다.

Blue, Green, Zero 이미지를 병합할 경우, Red 채널 영역이 모두 흑백이미지로 변경됩니다.


  • Tip : import numpy as np가 포함된 상태여야합니다.
  • Tip : 특정 색상의 이미지를 생성하려는 경우에는 np.full((높이, 너비, 채널), (b, g, r), dtype=정밀도)을 이용해 특정 색상 이미지를 생성할 수 있습니다.



Result


Blue

2


Green

3


Red

4


Inverse

5


Blue, Green, Zero

6



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python OpenCV 강좌 : 제 16강 - 배열 병합 ⤧  Next post Python OpenCV 강좌 : 제 18강 - 도형 그리기
    Python-OpenCV Category