안녕하세요 이번 포스팅은 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 이용하여 채널 분리 및 병합하는 방법에 대해서 포스팅을 작성하였습니다. 아직까지는 채널을 분리해서 어떻게 응용하는지는 그렇게 깊게는 이해하지 못하는 상황입니다. 하지만 계속 공부를 통해서 이미지를 인식하고 그 인식한 이미지를 이용하여 딥러닝을 할 수 있는 실력이 될 수 있게 노력하도록 하겠습니다. 감사합니다.
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을 때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
'파이썬 (Python) > 딥러닝 (Deep Learning)' 카테고리의 다른 글
Python 딥러닝 선형 회귀 평균 제곱 오차 (0) | 2021.06.05 |
---|---|
Python 딥러닝 선형 회귀 최소 제곱법 구현 해보기 (0) | 2021.06.04 |
Python opencv 이용하여 이미지 가장자리 검출하는 방법 (0) | 2021.03.06 |
Python opencv 이용하여 이미지 채널 범위 병합하는 방법 (0) | 2021.03.05 |
Python opencv 이용하여 이미지 Hue, Saturation, Value 값 구현 심화학습 (0) | 2021.03.05 |
댓글