본문 바로가기
오류 해결

[OpenCV] cv2.error: OpenCV(x.x.x) :-1: error: (-215:Assertion failed) size.width > 0 && size.height > 0 in function 'imshow'

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

에러 메시지 설명

  이 오류는 cv2.imshow() 함수가 호출될 때 발생하며, 표시하려는 이미지의 너비와 높이가 0보다 작다는 의미입니다. imshow() 함수는 이미지를 화면에 출력하는데, 이미지의 크기가 유효하지 않으면 이 오류가 발생합니다. 이는 OpenCV에서 이미지를 읽어오거나 처리하는 과정에서 이미지가 비어 있을 때 주로 발생합니다.

 

발생 원인

  이 오류는 다음과 같은 원인으로 발생할 수 있습니다.

  • 이미지 로드 실패: cv2.imread() 함수로 이미지를 불러올 때 잘못된 경로를 입력하거나 이미지 파일이 손상되면, 빈 이미지가 반환되어 크기가 0이 됩니다.
  • 비디오 캡처 실패: cv2.VideoCapture() 함수로 비디오 프레임을 읽어올 때, 비디오가 정상적으로 읽히지 않으면 빈 프레임이 반환될 수 있습니다.
  • 이미지 파일 경로 오류: 잘못된 파일 경로나 확장자를 입력하면 OpenCV가 이미지를 읽지 못하고 이 오류를 발생시킵니다.

 

해결 방법

이미지 로드 여부 확인

  먼저, 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()

  이 코드는 이미지가 올바르게 로드되었는지 확인하고, 로드되지 않았을 경우 경로를 점검하도록 안내합니다.

 

비디오 프레임 확인

  비디오에서 프레임을 읽어오는 경우, cv2.VideoCapture()로 비디오 또는 카메라에서 프레임을 가져올 때 문제가 발생할 수 있습니다. 이를 해결하기 위해 프레임이 올바르게 읽혔는지 확인하는 것이 중요합니다.

cap = cv2.VideoCapture(0)
ret, frame = cap.read()
if not ret:
    print("프레임을 읽지 못했습니다. 카메라 또는 비디오 파일을 확인하세요.")
else:
    cv2.imshow("Frame", frame)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

  retFalse일 경우, 비디오 캡처 장치나 파일 경로에 문제가 있음을 의미하므로 이를 확인합니다.

 

이미지 파일 유효성 확인

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

 

OpenCV 버전 업데이트

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

pip install --upgrade opencv-python

 

관련 내용 및 추가 팁

  • 이미지 형식 확인: 이미지 파일이 지원되지 않는 형식일 경우에도 이 오류가 발생할 수 있습니다. 다른 형식으로 변환한 후 다시 시도해 보세요.
    GUI 환경 문제: cv2.imshow()는 GUI 환경에서만 작동하므로, 서버 또는 터미널 환경에서는 imshow() 대신 matplotlib와 같은 다른 라이브러리를 사용하여 이미지를 시각화하는 방법도 고려할 수 있습니다.
  • OpenCV 공식 문서
  • PyPI opencv-python 페이지
반응형