본문 바로가기
오류 해결

[OpenCV] cv2.error: OpenCV(x.x.x) :-1: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'

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

에러 메시지 설명

  이 오류는 OpenCV의 cv2.imwrite() 함수에서 발생하며, 주로 저장하려는 이미지 파일이 비어 있거나 유효하지 않을 때 발생합니다. "Assertion failed" 메시지는 이미지가 비어 있다는 사실을 의미하며, 함수가 유효하지 않은 이미지 객체를 처리하려고 시도했음을 나타냅니다.

 

발생 원인

  이 오류는 주로 다음과 같은 원인으로 발생합니다:

  • 이미지 로드 실패: cv2.imread()로 이미지를 불러오려 했으나, 경로 오류나 파일 손상으로 인해 이미지가 None으로 반환된 경우.
  • 잘못된 이미지 처리: 이미지가 중간에 잘못 처리되거나, 잘못된 연산으로 인해 비어 있게 된 경우.
  • 비디오 프레임 또는 웹캠 입력 오류: 비디오에서 프레임을 가져오려 했으나, 올바르게 가져오지 못해 빈 프레임이 반환된 경우.

 

해결 방법

이미지 로드 여부 확인

  가장 먼저 확인할 것은 이미지가 제대로 로드되었는지 여부입니다. cv2.imread()로 이미지를 로드한 후, 이미지가 None 값인지 확인해야 합니다. 이미지 경로가 잘못되었거나, 파일이 손상되었을 경우, None 값이 반환됩니다.

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

 

비디오 프레임 확인

  비디오에서 프레임을 가져오려는 경우, cv2.VideoCapture()로 비디오를 열 때 문제가 있을 수 있습니다. 프레임을 정상적으로 가져왔는지 확인하고, 빈 프레임이 아닐 때만 저장합니다.

cap = cv2.VideoCapture(0)  # 웹캠 또는 비디오 파일
ret, frame = cap.read()
if not ret:
    print("프레임을 가져오지 못했습니다.")
else:
    cv2.imwrite('output_frame.jpg', frame)

  여기서 ret 값이 True이면 프레임을 제대로 읽어온 것이며, False이면 오류가 발생했음을 의미합니다.

 

이미지 처리 중간 단계 확인

  이미지 처리 중간에 이미지가 손상되거나 비어 있는 상태로 변할 수 있습니다. 모든 처리 단계에서 이미지가 유효한지 확인하는 것이 중요합니다. 예를 들어, 이미지 크기나 형식을 변환할 때 문제를 일으킬 수 있습니다.

processed_image = some_image_processing_function(image)
if processed_image is None or processed_image.size == 0:
    print("이미지가 비어 있거나 처리되지 않았습니다.")
else:
    cv2.imwrite('processed_image.jpg', processed_image)

 

OpenCV 버전 확인 및 업데이트

  OpenCV의 특정 버전에서 발생할 수 있는 버그일 수도 있으므로, 최신 버전으로 업데이트하여 문제를 해결할 수 있습니다. 다음 명령어를 사용하여 OpenCV를 업데이트하세요:

pip install --upgrade opencv-python

 

관련 내용 및 추가 팁

  • 파일 경로 및 권한 확인: 이미지가 저장될 경로가 올바른지 확인하고, 해당 디렉토리에 쓰기 권한이 있는지 확인하세요.
  • 이미지 파일 형식 지원 여부: OpenCV는 특정 이미지 형식만 지원하므로, 이미지 파일 형식이 OpenCV에서 지원되는 형식인지 확인해야 합니다.
  • OpenCV 공식 문서
  • PyPI opencv-python 페이지
반응형