Python OpenCV TypeError:参数'应为cv::UMat;src';-这是什么?
免责声明:巨大的openCV noob 回溯(最近一次呼叫最后一次): 文件“lanes2.py”,第22行,在Python OpenCV TypeError:参数'应为cv::UMat;src';-这是什么?,python,opencv,typeerror,src,Python,Opencv,Typeerror,Src,免责声明:巨大的openCV noob 回溯(最近一次呼叫最后一次): 文件“lanes2.py”,第22行,在 canny = canny(lane_image) canny中第5行的文件“lanes2.py” gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY) TypeError:参数“src”应为cv::UMat “src”到底指的是什么?是不是你自己的功能?你在里面使用OpenCV吗?如果是,请检查是否为Canny提供了合适的参数-第一个
canny = canny(lane_image)
canny中第5行的文件“lanes2.py”
gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)
TypeError:参数“src”应为cv::UMat
“src”到底指的是什么?是不是你自己的功能?你在里面使用OpenCV吗?如果是,请检查是否为
Canny
提供了合适的参数-第一个Canny
参数应满足以下条件:
- 类型:
- 数据类型:
dtype('uint8')
- 单通道或简化:灰度,即2D数组,即其
应为形状
s的2-int
(tuple
正好包含2个整数)tuple
type(variable_name)
variable_name.dtype
variable_name.shape
将variable\u name
替换为作为第一个参数输入到Canny
的变量名
gray = cv2.cvtColor(cv2.UMat(imgUMat), cv2.COLOR_RGB2GRAY)
UMat是为CPU和OpenCL实现编写一个代码的帮助的一部分。
src
是cv2.cvtColor
的第一个参数
您得到的错误是因为它不是正确的表单cv2.Umat()
在功能上等同于np.float32()
,因此最后一行代码应为:
gray = cv2.cvtColor(np.float32(imgUMat), cv2.COLOR_RGB2GRAY)
问题不在于你的代码这很好:
gray = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2GRAY)
问题在于imgUMat是None
,因此在加载图像时可能会出错:
imgUMat = cv2.imread("your_image.jpg")
我怀疑您刚刚输入了错误的图像路径。这是一个一般性错误,当您使用的数据类型之间存在不匹配时,有时会引发此错误。例如,我试图用opencv调整图像大小,它给出了相同的错误。这是一个关于它的讨论 当from包无法识别帧或给出空帧时,有时会出现此错误。在这种情况下,解决方案将是找出为什么会有如此糟糕的帧或使用opencv2中的标准视频捕获(0)方法。以下内容可从
numpy中使用:
import numpy as np
image = np.array(image)
只需在开始时添加以下内容:
image=cv2.imread(image)我通过写入/读取文件来解决这个问题。我猜cv.imread会把它转换成它需要的格式。这段代码是为anki Vector SDK程序编写的,不过你明白了
tmpImage=robot.camera.latest\u image.raw\u image.save('temp.png')
pilImage=cv.imread('temp.png')某些数据类型不受特定OpenCV函数的支持。例如,数据类型np.uint32的输入会产生此错误。尝试将输入转换为支持的数据类型(例如np.int32或np.float32),该类型指的是图像的预期数据类型
“image”。如果使用ImageGrab,aType('float32')应该可以解决您的问题
验证您的映像是否由于错误的bbox
而不是0x0区域。验证应用程序根文件夹是否与您尝试运行的文件相同。这是不足以调试错误的信息。简而言之,src
指的是您传递给函数的输入矩阵/图像。这对我很有用(python3.7)。绘制图像是成功的,并且图像似乎没有以任何方式损坏。但在尝试使用cv2.resize(图像,(1280720))时仍然出现此错误。如上图所示,在使用numpy向ndarray强制转换后,问题已解决。由于摄像头损坏,视频捕获(0)无法识别帧。不是吗????请澄清此疑问这给了我此错误UMat()缺少必需的参数“ranges”(位置2)