이미지 채널 분리와 재합성

cvtColor로 BGR을 RGB로 바꾸었다면 순서대로 RGB로 배열되어 있다. 하나씩 분리한다.

import cv2
import numpy as np
import matplotlib.pyplot as plt

src = cv2.cvtColor(cv2.imread("seq2337.tif"), cv2.COLOR_BGR2RGB)
im_r = im[:,:,0]
im_g = im[:,:,1]
im_b = im[:,:,2]

자료 타입이 uint8으로 되어 있다. 일정한 정도를 빼거나 더할 경우 아마 255 범위를 넘어가면 다시 반복한다. 그래서 일반 정수형으로 변환이 필요하다. 내가 시도한 것은 일정한 정도를 뺐을 때 0보다 작으면 0으로 치환하는 것이다.

im_r1 = np.array(im_r, dtype=np.int64) - 255
im_r1[im_r1[:] < 0] = 0

이렇게 변환한 값을 다시 RGB로 보고 싶으면 uint8으로 변환한 다음에 쌓아준다. dstack을 이용한다.

im_r1 = np.array(im_r1, dtype=np.uint8)
re_im = np.dstack((im_r1, im_g, im_b))