• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[05] OpenCV 영상처리 이미지 채널 분리 및 합치기

05 Feb 2020

Reading time ~2 minutes

Table of Contents
  • 이미지 채널 분리 및 합치기 목차
  • 이미지 채널 분리 및 합치기
  • C++
    • 채널 분리
    • 채널 합치기
    • 채널 혼합
  • PYTHON
    • 채널 분리
    • 채널 병합
    • numpy 형식 채널 분리

이미지 채널 분리 및 합치기 목차

  • C++
    • 채널 분리
    • 채널 합치기
    • 채널 혼합
  • PYTHON
    • 채널 분리
    • 채널 병합
    • numpy 형식 채널 분리

이미지 채널 분리 및 합치기

컬러 이미지를 B, G, R 채널로 분리한 후, 순서를 R, G, B로 바꾸어 컬러 이미지를 생성하는 예제.

OpenCV가 제공하는 기본 채널연산.

  • 채널 분리 (spilt)
  • 채널 병합 (merge)
  • 채널 혼합 (mix)

Color 창에 보이는 이미지를 보면 Red와 Blue 의 위치가 바뀜.
R, G, B 창에 보여지는 채널별 이미지는 해당 채널의 픽셀값이 255인 영역만 흰색으로 보임
image image

C++

채널 분리

split(분리 할 이미지, 분리된 채널들이 저장될 배열)

# include < opencv2/opencv.hpp> # include < iostream>
using namespace cv;
using namespace std;
int main()
{
  Mat img_color;
  img_color = imread("color.png", IMREAD_COLOR);

  // 컬러 이미지를 채널별로 분리합니다.
  // img_channels 배열에 blue, green, red순으로 채널이 저장됩니다.
  Mat img_channels[3];
  split(img_color, img_channels);

  // 채널별 이미지를 조합하여 컬러 영상을 생성합니다.
  // blue와 red의 순서를 바꾸었습니다.
  vector<Mat> channels;
  channels.push_back(img_channels[2]); // red channels.push_back(img_channels[1]); // green channels.push_back(img_channels[0]); // blue
  Mat img_result;
  merge(channels, img_result);
  imshow("Color", img_result);
  imshow("B", img_channels[0]);
  imshow("G", img_channels[1]);
  imshow("R", img_channels[2]);
  waitKey(0);
  return 0;
}

채널 합치기

merge(합칠 이미지, int 합칠 이미지 개수, 출력 이미지);

채널 혼합

BGR을 RGB로 바꾸는 혼합순서 image

input[0] -> output[2] (0 -> 2)
input[1] -> output[1] (1 -> 1)
input[2] -> output[0] (2 -> 0)


PYTHON

채널 분리

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

  • 입력 이미지(src)에서 채널을 분리해
  • 단일 채널 이미지 배열(mv)을 생성
    • mv는 목록(list) 형식으로 반환
    • b, g, r 등의 형태로 각 목록의 원솟값을 변수로 지정
  • 분리된 것은 흑백으로 표현됨

채널 병합

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

import cv2 as cv

img_color = cv.imread('color.png', cv.IMREAD_COLOR )

# 컬러 이미지를 채널별로 분리합니다.
img_b,img_g,img_r = cv.split(img_color)

# 채널별 이미지를 조합하여 컬러 영상을 생성합니다.
# blue와 red의 순서를 바꾸었습니다.
img_result = cv.merge((img_r, img_g, img_b))

cv.imshow("Color", img_result) 
cv.imshow("B", img_b) 
cv.imshow("G", img_g) 
cv.imshow("R", img_r)

cv.waitKey(0) 
cv.destroyAllWindows()

numpy 형식 채널 분리

이미지[높이, 너비, 채널]
특정영역의 특정채널만 불러오는 법

:, :, n을 입력할 경우,

  • 이미지 높이와 너비를 그대로 반환
  • n번째 채널만 반환하여 적용
b = src[:, :, 0]
g = src[:, :, 1]
r = src[:, :, 2]


OpenCV Share Tweet +1