【问题标题】:Expected cv::UMat for argument 'src'参数“src”的预期 cv::UMat
【发布时间】:2019-03-15 23:20:05
【问题描述】:

我正在尝试在图像上应用 canny 函数,这是完整的代码,但只有当我将步骤放在函数中时它才会显示错误,但在将所有代码留在任何函数之外时不会显示。代码:

import cv2
import numpy as np

def canny(image):
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    blur = cv2.GaussianBlur(gray, (5,5), 0)
    canny = cv2.Canny(blur, 50, 150) #sick
    return canny

sourceimage = cv2.imread('lane.jpg')
img = np.copy(sourceimage)
canny = canny(img)
cv2.imshow("result", canny)
cv2.waitKey(0)

这是我得到的错误:(python 3.6.8)

kream@KRIMZON:~/Desktop/finding-lanes-linux$ python3 lane.py
Traceback (most recent call last):
  File "lane.py", line 12, in <module>
    cannyer = canny(img)
  File "lane.py", line 5, in canny
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
TypeError: Expected cv::UMat for argument 'src'
kream@KRIMZON:~/Desktop/finding-lanes-linux$

【问题讨论】:

  • 问题已修复,在我使用原始图像的变量而不是我制作的实际副本后发现原始图像被我错误地损坏/修改后,通过替换修复原始图像并确保它不会再次发生,感谢阅读。
  • 太棒了,你自己解决了这个问题 :) -- 但是为了使它有用,要么写一个自我回答,要么删除问题。
  • 由于某种原因,它不允许我在 48 小时之前写出自我回答。

标签: python python-3.x opencv


【解决方案1】:

当我只运行代码时,它也会抱怨Expected cv::UMat for argument 'src'因为我的电脑里没有lane.jpg,所以cv2.imread返回NoneTypenp.copy返回np.array(None, dtype=object)如果你只是把这样一个变量传递给cv2,它会报错@ 987654331@.

是的,您应该检查您的图像是否存在并成功加载!


请注意,另一个不好的做法是:您的变量名称canny 与您的函数名称canny() 相同。所以当你调用canny = canny(img)时,函数canny()对象被变量canny替换。如果你下次调用canny(),它会像这样失败:TypeError: 'numpy.ndarray' object is not callable

然后使用不同的名称。


>>> src = cv2.imread("noexist.png")
>>> img = np.copy(src)
>>>
>>> type(src)
<class 'NoneType'>
>>> cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: OpenCV(4.0.1) d:\build\opencv\opencv-4.0.1\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

>>>
>>> img
array(None, dtype=object)
>>> cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Expected cv::UMat for argument 'src'
>>>
>>> img()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'numpy.ndarray' object is not callable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多