cv2.imwrite() color change 문제

잠만보 석사생·2022년 8월 29일
0

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

profile
생명공학을 전공했지만 AI에 관심있는 사람

0개의 댓글