OpenCV TypeError: Expected cv::UMat for argument ‘src’ – What is this?

Posted on

Question :

OpenCV TypeError: Expected cv::UMat for argument ‘src’ – What is this?

Disclaimer: huge openCV noob

Traceback (most recent call last):

File “lanes2.py”, line 22, in

canny = canny(lane_image)

File “lanes2.py”, line 5, in canny

gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)

TypeError: Expected cv::UMat for argument ‘src’

What exactly is ‘src’ referring to?

Answer #1:

src is the first argument to cv2.cvtColor.

The error you are getting is because it is not the right form. cv2.Umat() is functionally equivalent to np.float32(), so your last line of code should read:

gray = cv2.cvtColor(np.float32(imgUMat), cv2.COLOR_RGB2GRAY)
Answered By: Varun Mathur

Answer #2:

gray = cv2.cvtColor(cv2.UMat(imgUMat), cv2.COLOR_RGB2GRAY)

UMat is a part of the Transparent API (TAPI) than help to write one code for the CPU and OpenCL implementations.

Answered By: Nuzhny

Answer #3:

The following can be used from numpy:

import numpy as np 
image = np.array(image)
Answered By: Avi Avidan

Answer #4:

Not your code is the problem this is perfectly fine:

gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)

The problem is that imgUMat is None so you probably made a mistake when loading your image:

imgUMat = cv2.imread("your_image.jpg")

I suspect you just entered the wrong image path.

Answered By: Maximilian

Answer #5:

Is canny your own function? Do you use Canny from OpenCV inside it? If yes check if you feed suitable argument for Canny – first Canny argument should meet following criteria:

  • type: <type 'numpy.ndarray'>
  • dtype: dtype('uint8')
  • being single channel or simplyfing: grayscale, that is 2D array, i.e. its shape should be 2-tuple of ints (tuple containing exactly 2 integers)

You can check it by printing respectively

type(variable_name)
variable_name.dtype
variable_name.shape

Replace variable_name with name of variable you feed as first argument to Canny.

Answered By: Daweo

Answer #6:

This is a general error, which throws sometimes, when you have mismatch between the types of the data you use. E.g I tried to resize the image with opencv, it gave the same error. Here is a discussion about it.

Answered By: Hazarapet Tunanyan

Answer #7:

Just add this at start:
image = cv2.imread(image)

Answered By: Amar Sagat

Answer #8:

Some dtype are not supported by specific OpenCV functions. For example inputs of dtype np.uint32 create this error. Try to convert the input to a supported dtype (e.g. np.int32 or np.float32)

Answered By: Oliver Zendel

Leave a Reply

Your email address will not be published. Required fields are marked *