본문 바로가기
오류 해결

[OpenCV] TypeError: Expected cv::UMat for argument 'src'

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

에러 메시지 설명

  TypeError: Expected cv::UMat for argument 'src' 오류는 OpenCV에서 특정 함수에 전달된 인자의 자료형이 예상과 맞지 않을 때 발생합니다. 이 오류는 OpenCV가 예상하는 자료형이 cv::UMat 또는 cv::Mat일 때, 해당 함수에 잘못된 자료형이 전달된 경우 발생합니다.

 

발생 원인

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

  • 잘못된 데이터 타입 전달: OpenCV 함수에 배열이나 리스트와 같은 Python 네이티브 타입을 전달할 때 발생할 수 있습니다. OpenCV는 기본적으로 numpy 배열이나 cv::UMat, cv::Mat 객체를 받아야 합니다.
  • 버전 차이: 일부 OpenCV 함수는 CPU에서 동작하는 cv::Mat과 GPU에서 동작하는 cv::UMat을 모두 지원합니다. 특정 함수에서 GPU 가속을 지원할 때 UMat을 요구할 수 있습니다.
  • 이미지 또는 데이터 형식 변환 문제: OpenCV가 처리하는 이미지 또는 데이터가 올바르게 변환되지 않아 이 오류가 발생할 수 있습니다.

 

해결 방법

numpy 배열을 사용하여 이미지 처리

  OpenCV는 일반적으로 numpy 배열을 처리하는데, 함수에 잘못된 자료형이 전달되면 오류가 발생할 수 있습니다. 데이터가 올바른 numpy 배열인지 확인하고, 변환 후 함수를 호출해야 합니다.

import cv2
import numpy as np

image = np.array([[255, 255], [0, 0]], dtype=np.uint8)  # numpy 배열로 이미지 생성
gray_image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)  # OpenCV 함수 사용

 

cv::Mat과 cv::UMat 변환

  OpenCV에서 UMat 객체는 GPU에서 효율적으로 처리될 수 있는 데이터 형식입니다. 만약 GPU 가속을 활용하려고 한다면, cv::UMat을 사용하여 처리할 수 있습니다. cv2.UMat() 함수를 사용해 numpy 배열을 UMat으로 변환할 수 있습니다.

umat_image = cv2.UMat(image)  # numpy 배열을 UMat으로 변환
gray_image = cv2.cvtColor(umat_image, cv2.COLOR_BGR2GRAY)

 

버전 차이로 인한 문제 확인

  사용 중인 OpenCV 버전이 최신 버전인지 확인하고, 가능한 경우 최신 버전으로 업데이트합니다. 일부 함수는 특정 버전에서만 GPU 가속 기능을 제공할 수 있으며, CPU에서 동작하는 cv::Mat을 기본으로 처리할 수 있습니다.

pip install --upgrade opencv-python

 

UMat이 필요 없는 경우

  GPU 가속이 필요하지 않다면 cv::Mat 형식으로 이미지를 처리하는 것이 더 간단할 수 있습니다. 함수에서 UMat을 요구하지 않는 경우 numpy 배열을 Mat 형식으로 처리할 수 있습니다.

image = cv2.imread('path/to/image.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 기본적인 BGR -> 그레이 변환

 

관련 내용 및 추가 팁

  • UMat 사용: GPU 가속이 필요한 작업에서는 cv::UMat을 사용하는 것이 유리할 수 있으며, 이를 통해 OpenCV가 GPU를 활용하여 성능을 높일 수 있습니다.
    환경 확인: OpenCV가 올바르게 설치되어 있는지 확인하고, numpy 패키지가 최신 버전인지 점검하세요.
  • OpenCV 공식 문서
  • PyPI opencv-python 페이지
반응형