반응형
Notice
Link
스택큐힙리스트
왜 cv2.imwrite() 함수가 이미지의 색상을 변경하나요? 본문
반응형
다음과 같은 코드 조각이 있습니다:
imgs = glob.glob('/home/chipin/heart/tray.png')
current_img = io.imread(imgs[0])
cv2.imwrite('/home/chipin/heart/01.png', current_img[0:511,0:511])
이 사진의 크기는 512*512이며, 저장 후 파란색 사진이 노란색으로 바뀐 것 같습니다. 하나의 채널이 버려진 것 같습니다. 왜그런지 정말 모르겠습니다.
current_img의 값은 다음과 같습니다:
답변 1
대안으로 OpenCV를 사용할 수도 있습니다 -- 이미지를 로드하기 위해 cv2.imread
를 사용하세요. 이 경우에는 BGR 이미지만 사용합니다.
NB: 어떤 플래그도 제공하지 않을 경우, 기본적으로 cv2.IMREAD_COLOR
가 사용됩니다 -- 즉, 이미지는 항상 3채널 이미지로 로드됩니다(알파 채널이 있을 경우 삭제됨).
import cv2
img = cv2.imread('샘플.png')
cv2.imwrite('샘플_출력_3.png', img)
4채널 이미지
당신의 스크린샷을 보면, 4채널 이미지로 보입니다. 이는 skimage에서 RGBA를 의미하며, OpenCV에서는 BGRA를 의미합니다. 이 원칙들은 유사할 것입니다.
- 색상 변환 코드
cv2.COLOR_RGBA2BGRA
를 사용하거나 - 플래그
cv2.IMREAD_UNCHANGED
와 함께cv2.imread
를 사용하십시오.
답변 2
왜 cv2.imwrite()가 사진의 색상을 변경하는 것일까요? 이 주제에 대해 SEO를 고려한 한국어 에세이를 작성해보겠습니다.---------------------------
제목: OpenCV의 cv2.imwrite() 함수가 사진의 색상을 변경하는 이유
서론:
OpenCV는 영상 처리와 컴퓨터 비전을 위한 가장 인기 있는 라이브러리 중 하나입니다. 그 중에서도 cv2.imwrite() 함수는 이미지를 파일로 저장하기 위해 주로 사용됩니다. 그러나 이미지를 저장할 때 이 함수는 때로는 사진의 색상을 변경하는 것으로 알려져 있습니다. 이에 대한 원인과 해결책에 대해 알아보겠습니다.
1. OpenCV와 cv2.imwrite() 함수 소개
- OpenCV는 이미지와 비디오 처리, 물체 감지, 얼굴 인식 등 다양한 컴퓨터 비전 작업을 지원하는 오픈 소스 라이브러리입니다.
- cv2.imwrite() 함수는 OpenCV에서 제공하는 함수 중 하나로, 이미지를 파일로 저장할 때 사용됩니다.
2. cv2.imwrite() 함수에서 사진 색상 변경의 이유
cv2.imwrite() 함수가 이미지의 색상을 변경하는 이유는 주로 색상 채널 순서 때문입니다. 일반적으로 대부분의 이미지 파일 형식은 BGR(Blue-Green-Red) 채널 순서를 따릅니다. 하지만 대부분의 응용 프로그램은 RGB(Red-Green-Blue) 채널 순서를 사용합니다.
따라서, cv2.imread() 함수를 사용하여 이미지를 읽을 때 이미지 파일은 BGR 형식을 따르고, cv2.imwrite() 함수를 사용하여 이미지를 저장할 때 RGB 형식을 사용합니다. 이러한 색상 채널의 변경으로 인해 사진의 색상이 변경되는 것입니다.
3. 사진 색상 변경 방지를 위한 해결책
cv2.imwrite() 함수를 사용할 때 사진의 색상 변경을 방지하기 위해서는 몇 가지 접근 방법을 고려할 수 있습니다.
- 이미지를 읽을 때, cv2.imread() 함수에 옵션을 추가하여 이미지를 RGB 형식으로 읽는다면, 저장 시 변경되는 색상을 방지할 수 있습니다.
예: image = cv2.imread('image.jpg', cv2.IMREAD_COLOR | cv2.IMREAD_IGNORE_ORIENTATION)
- 이미지를 읽어와서 색상 채널을 수동으로 변경한 후 cv2.imwrite() 함수를 사용하여 저장합니다.
예: image = cv2.imread('image.jpg')
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imwrite('new_image.jpg', rgb_image)
이렇게 함으로써 사진의 원래 색상을 유지하면서 cv2.imwrite() 함수를 사용할 수 있습니다.
결론:
OpenCV의 cv2.imwrite() 함수는 이미지를 파일로 저장하기 위해 사용되지만, 이미지의 색상 채널 순서가 변경되는 문제를 일으킬 수 있습니다. 이것은 이미지 파일 형식과 채널 순서의 차이 때문입니다. 이 문제를 해결하기 위해서는 이미지를 읽을 때 RGB 형식으로 읽거나, 색상 채널을 수동으로 변경하는 방법 등을 고려할 수 있습니다. 이러한 해결책을 통해 원래 사진의 색상을 유지하면서 cv2.imwrite() 함수를 적절히 활용할 수 있습니다.
반응형
Comments