Table of Contents
이미지 채널 분리 및 합치기 목차
이미지 채널 분리 및 합치기
컬러 이미지를 B, G, R 채널로 분리한 후, 순서를 R, G, B로 바꾸어 컬러 이미지를 생성하는 예제.
OpenCV가 제공하는 기본 채널연산.
- 채널 분리 (spilt)
- 채널 병합 (merge)
- 채널 혼합 (mix)
Color 창에 보이는 이미지를 보면 Red와 Blue 의 위치가 바뀜.
R, G, B 창에 보여지는 채널별 이미지는 해당 채널의 픽셀값이 255인 영역만 흰색으로 보임
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로 바꾸는 혼합순서
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]