Skimage로 읽을때는 RGB로 로딩되지만 OpenCV는 image를 불러올때 RGB (or RGBA) 로 불러오지 않고 BGR (or BGRA)로 불러온다. 즉 Blue 하고 Red color channel이 바뀐건데, 밑 이미지를 예시로 그대로 불러와보자.
import skimage.io
import cv2
img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_1.png', img)
위 이미지를 그냥 opencv로 imwrite으로 output으로 출력할 시 빨간색과 파란색 채널이 아예 바뀐것을 볼 수 있다. 그래서 cv2.imwrite을 할 시 cv2.cvtcolor을 붙여줘야된다. 코드는 아래와 같다.
import skimage.io
import cv2
img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_2.png', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
또는 그냥 cv2.imread를 이용하여 바로 불러오자. 대신 이 경우에는 BGR images만 사용한다. 안전하게 cv2.COLOR_BGR2RGB를 넣는것도 좋은방법이다.
import cv2
img = cv2.imread('sample.png')
cv2.imwrite('sample_out_3.png', img)
# 또는
cv2.imwrite('sample_out_2.png', cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
출처: https://stackoverflow.com/questions/42406338/why-cv2-imwrite-changes-the-color-of-pics