본문 바로가기
파이썬 (Python)/딥러닝 (Deep Learning)

Python opencv 이용하여 채널 분리 및 병합하는 방법

by ★√★ 2021. 3. 17.

안녕하세요 이번 포스팅은 opencv 이용하여 채널 분리 및 병합하는 방법에 대해서 포스팅을 하도록 하겠습니다. 영상이나 이미지의 채널을 나누고 합치면서 원하는 이미지 상태를 구현할 수 있습니다. 

 

 

opencv-채널-분리-병합-썸네일
opencv-채널-분리-병합

 

 

opencv를 이용하여 채널 분리 및 병합 코드 구현

opencv를 이용하여 채널을 분리하고 그 분리된 채널들을 병합해보도록 하겠습니다. 채널은 Blue, Green, Red로 분리할 수 있으며, 채널을 분리하는 코드 및 병합하는 코드를 사용하시면 주의해야 할 점이 병합 시 채널의 순서를 바꾸면 기존에 가지고 있던 원본 이미지와 다른 이미지로 변환이 됩니다. 또한 특정 채널을 빈 이미지로 대체하여 출력할 수도 있습니다. 그럼 일단 먼저 코드 분석을 먼저 설명드리도록 하겠습니다. 

 

# opencv 라이브러리 선언하기
import cv2
import numpy as np

#원본 이미지 불러오기
test_image = cv2.imread("003.JPG", cv2.IMREAD_COLOR)

#불러온 원본 이미지에서 채널을 3개로 분리
test_blue, test_green, test_red = cv2.split(test_image)

#분리된 이미지 채널의 순서를 바꿔서 병합함
#순서를 바꿔서 병합하게 되면 원본 이미지와 상의하게 나타남
mixed_BGR = cv2.merge((test_green, test_blue, test_red))

# 분리된 이미지 채널 중에 특정 채널을 빈 이미지로 대체하여 병합함
Orignal_img_height, Orignal_img_width, Orignal_img_channel = test_image.shape
zero = np.zeros((Orignal_img_height, Orignal_img_width, 1), dtype = np.uint8)
zero_merged_img = cv2.merge((test_blue, test_green, zero))


# 각각의 분리된 채널 및 순서를 바꿔서 병합한 이미지 출력
# 특정 채널 대신 빈 이미지를 이용하여 병합한 이미지 출력
# 참조용으로 원본 이미지도 같이 출력

cv2.imshow("Original", test_image)
cv2.imshow("Blue Channel", test_blue)
cv2.imshow("Green Channel", test_green)
cv2.imshow("Red Channel", test_red)
cv2.imshow("mixed_BGR", mixed_BGR)
cv2.imshow("Zero merged", zero_merged_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

코드 분석

- test_blue, test_green, test_red= cv2.split(원하는 이미지)

1) cv.2split()를 이용하여 원하는 이미지의 채널을 분리함. 

2) 그리고 분리된 Channel은 Channel 1, 2, 3이라는 변수에 대입이 됨.

 

- mixed_BGR = cv2.merge((test_green, test_blue, test_red))

1) 기존에 분리한 test_blue, test_green, test_red을 병합할 수 있음. 

2) 분리했을 때의 순서대로 병합을 하게 되면 원본 이미지와 동일하게 출력이 되겠지만 순서를 바꾸게 되면 다르게 출력이 됨. 임의로 test_green과 test_blue의  순서를 바꿔서 병합해보도록 하겠습니다. 

 

- zero_merged_img = cv2.merge((test_blue, test_green, zero))

1) test_red의 채널을 zero (빈 이미지 채널) 로 대체하여 병합할 수 있음.

2) zero 채널 구현을 위한 코드는 위의 코드 블럭에서 참조하시면 됩니다.

 

 

코드 구현한 이미지 출력하기

: 위에서 설명하고 구현한 코드를 출력하면 아래와 같이 출력이 되는 걸 확인하실 수 있습니다. 일단 각 채널마다 출력이 되는 걸 보시면 다 흑백으로 처리가 되는 걸 확인하실 수 있습니다. 왜냐하면 단일 채널로 분리가 되어 있기 때문입니다. 그럼 그 단일 채널들을 순서를 바꿔서 출력한 것을 보면 원본 이미지랑 다르다는 걸 확인하실 수 있습니다.

 

 또한 특정 채널 (test_red) 대신 빈 이미지 (zero)를 가지고 나머지 두 채널과 병합한 것도 보시면 원본과 다르다는 것을 확인 하실 수 있습니다. 즉 각 채널의 분리와 병합을 통해서 원하는 방식의 색 구별을 구현할 수 있다는 것입니다. 

 

 

opencv-채널-분리-병합-결과
opencv-채널-분리-병합-결과

 

맺음말

: 이상입니다. 지금까지 opencv 이용하여 채널 분리 및 병합하는 방법에 대해서 포스팅을 작성하였습니다. 아직까지는 채널을 분리해서 어떻게 응용하는지는 그렇게 깊게는 이해하지 못하는 상황입니다. 하지만 계속 공부를 통해서 이미지를 인식하고 그 인식한 이미지를 이용하여 딥러닝을 할 수 있는 실력이 될 수 있게 노력하도록 하겠습니다. 감사합니다. 

 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을 때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.] 

 

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab