본문 바로가기
오류 해결

[OpenCV] cv2.error: OpenCV(x.x.x) :-1: error: (-5:Bad argument) in function 'imshow'

by First Adventure 2024. 9. 16.
반응형

에러 메시지 설명

  이 오류는 cv2.imshow() 함수 호출 시 발생하며, 이 함수는 이미지를 화면에 출력하는 역할을 합니다. "Bad argument"는 함수에 전달된 인자가 잘못되었음을 나타내며, 이는 주로 함수에 전달된 이미지 형식이나 크기가 잘못된 경우 발생합니다.

 

발생 원인

  이 오류는 여러 가지 이유로 발생할 수 있습니다.

  • 잘못된 데이터 형식 전달: cv2.imshow() 함수에 전달된 객체가 이미지 데이터가 아닌 경우, 즉 NoneType이나 다른 자료형이 전달되었을 때 발생할 수 있습니다.
  • 지원되지 않는 이미지 형식: cv2.imshow()는 OpenCV에서 지원하는 이미지 형식(BGR, 그레이스케일 등)만 처리할 수 있습니다. 지원되지 않는 형식(예: RGBA)을 전달하면 오류가 발생할 수 있습니다.
  • 이미지 크기 오류: cv2.imshow()에 전달된 이미지의 크기가 잘못되었거나 비어 있을 때 발생합니다.
  • 파일 경로 문제: 이미지 파일이 제대로 로드되지 않았을 때, None 값이 전달되어 이 오류가 발생할 수 있습니다.

 

해결 방법

이미지 로드 여부 확인

  먼저, cv2.imread()로 이미지를 로드한 후, 이미지가 제대로 로드되었는지 확인합니다. 이미지가 None이라면, 잘못된 경로나 파일 문제일 수 있습니다.

image = cv2.imread('path/to/image.jpg')
if image is None:
    print("이미지를 로드하지 못했습니다. 경로를 확인하세요.")
else:
    cv2.imshow("Image", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

 

이미지 데이터 형식 확인

  이미지가 OpenCV에서 처리 가능한 형식인지 확인해야 합니다. cv2.imread()로 로드된 이미지는 기본적으로 BGR 형식입니다. 다른 라이브러리에서 이미지를 처리한 후 cv2.imshow()에 전달하는 경우, 이미지의 형식을 확인해야 합니다.
  예를 들어, PIL.Image 객체를 cv2.imshow()에 바로 전달하면 오류가 발생할 수 있습니다. 이런 경우, 이미지를 numpy 배열로 변환해야 합니다.

from PIL import Image
import numpy as np

image = Image.open('path/to/image.png')
image = np.array(image)
cv2.imshow("Image", image)

 

이미지 파일 유효성 확인

  이미지 파일이 손상되었거나 지원되지 않는 형식일 경우에도 이 오류가 발생할 수 있습니다. 이미지 파일이 정상적인 형식인지, 파일이 손상되지 않았는지 확인한 후 다시 로드해 보세요.

 

OpenCV 버전 업데이트

  특정 OpenCV 버전에서 이 문제가 발생할 수 있으므로, OpenCV를 최신 버전으로 업데이트하는 것도 해결 방법 중 하나입니다.

pip install --upgrade opencv-python

 

관련 내용 및 추가 팁

  • 이미지 형식 변환: 이미지가 RGBA나 다른 형식일 경우, OpenCV에서 처리 가능한 BGR 또는 그레이스케일로 변환하여 문제를 해결할 수 있습니다.
image = cv2.imread('path/to/image.png', cv2.IMREAD_COLOR)  # BGR 형식으로 읽기
  • try-except로 오류 처리: 오류가 발생할 수 있는 상황에서 try-except 구문을 사용하여 문제를 처리할 수 있습니다.
try:
    cv2.imshow("Image", image)
except cv2.error as e:
    print(f"OpenCV 오류: {e}")
반응형