我试图将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$
当我运行代码时,它也会抱怨
Expected cv::UMat for argument 'src'
。因为在我的电脑中没有lane.jpg
,所以cv2.imread
返回NoneType
,并且np.copy
返回np.array(None, dtype=object)
。如果您只是将这样的变量传递给cv2,它就会抱怨Expected cv::UMat for argument 'xxx'
。是的,你应该检查你的图像是否存在并成功加载!
注意,另一个不好的做法是:变量名
canny
与函数名canny()
相同。所以当您调用canny = canny(img)
时,函数canny()
对象被变量canny
替换。如果下次调用canny()
,它将像这样失败:TypeError: 'numpy.ndarray' object is not callable
。然后用不同的名字。
相关问题 更多 >
编程相关推荐