반응형


이미지를 채널별 이미지로 분리하는 방법과 채널별 이미지를 합치는 방법을 설명합니다.



마지막 업데이트 - 2018. 9. 14






다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다.


https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html






이미지를 불러오면 Blue, Green, Red 채널을 가진 BGR 이미지가 됩니다.

split 함수를 사용하여 색 채널별로 분리하여 출력해보겠습니다.


import cv2

img_color = cv2.imread('Billiard.jpg', cv2.IMREAD_COLOR )

img_b,img_g,img_r = cv2.split(img_color)

cv2.imshow("BGR", img_color)
cv2.imshow("B", img_b)
cv2.imshow("G", img_g)
cv2.imshow("R", img_r)

cv2.waitKey(0)

cv2.destroyAllWindows()



원본 영상입니다.





채널별로 분리한다고 했는데 B, G, R 모두 그레이스케일 영상으로 보입니다.

원본 이미지는  B, G, R 3개의 채널로 구성된 BGR 이미지이지만 split 함수를 사용하여 분리하면 채널 한개만 존재하기 때문에 그레이스케일 영상처럼 보이는 것입니다.



각 채널에서 해당되는 색을 가진 공이 다른 공보다 밝게 보입니다.  해당 채널에서 강조되는 색이기 때문입니다. 픽셀값이 255에 가까울수록 밝게 보입니다.





각 채널의 이미지를 사람 눈에 익숙한 모습으로 변경해보겠습니다.

merge 함수를 사용하면 채널 이미지를 합칠 수 있습니다. 해당 채널외에는 빈 이미지를 사용하면 해당 채널의 색만 강조된 이미지가 보여집니다.


import cv2
import numpy as np

img_color = cv2.imread('Billiard.jpg', cv2.IMREAD_COLOR )

img_b,img_g,img_r = cv2.split(img_color)

zeros = np.zeros((img_color.shape[0], img_color.shape[1]), dtype="uint8")
img_b = cv2.merge([img_b, zeros, zeros])
img_g = cv2.merge([zeros, img_g, zeros])
img_r = cv2.merge([zeros, zeros, img_r])

cv2.imshow("BGR", img_color)
cv2.imshow("B", img_b)
cv2.imshow("G", img_g)
cv2.imshow("R", img_r)

cv2.waitKey(0)

cv2.destroyAllWindows()






해당 채널과 비슷한 픽셀값을 가진 경우에만 밝게 보입니다.





참고


https://docs.opencv.org/3.4.3/d3/df2/tutorial_py_basic_ops.html



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts