python opencv cv2.threshold(),TypeError:argument'应为cv::UMat;垫';
上面的代码运行良好。但是,下面的代码不起作用 高于cv2.adaptiveThreshold(),低于cv2.threshold() openvv版本是4python opencv cv2.threshold(),TypeError:argument'应为cv::UMat;垫';,python,opencv,Python,Opencv,上面的代码运行良好。但是,下面的代码不起作用 高于cv2.adaptiveThreshold(),低于cv2.threshold() openvv版本是4 import numpy as np import cv2 imgfile = 'mi.jpg' img = cv2.imread(imgfile,0) tmp = img.copy() kernel_sharpening = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]) tmp1 = cv2.
import numpy as np
import cv2
imgfile = 'mi.jpg'
img = cv2.imread(imgfile,0)
tmp = img.copy()
kernel_sharpening = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])
tmp1 = cv2.pyrDown(tmp) # down sampleing
tmp2 = cv2.GaussianBlur(tmp1,(3,3),0) # bluring
tmp3 =cv2.filter2D(tmp2,-1,kernel_sharpening) # sharping
tmp3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,2)
cv2.imshow('threshold',tmp3)
cv2.waitKey()
cv2.destroyAllWindows()
回溯(最近一次调用last):文件“down.py”,第26行,在
cv2.imshow('threshold',tmp3)类型错误:预期的cv::UMat为
参数“mat”
threshold()返回一个元组…注意,在上面的示例中,您是thresholding
img
,在下面的示例中,您是thresholdingtmp3
,如果您阅读的文档,您会注意到它返回一个元组(retval,dst)
,其中第二个元素是结果图像。您正在将整个元组输入到imshow
,它只希望得到一个图像。。。这显然是行不通的。@Nuzhny IMHO这并不是那句话的翻版,尽管这句话看起来很相似(而且问题一开始似乎很糟糕)。见上面我的观察。在一些垃圾中传递将Python对象映射到C++的绑定部分混淆。有时,这会导致相当混乱的错误消息。具体地说,您总是会在最后一次尝试参数或重载解析时收到错误。在这里,它首先尝试将元组映射到一个失败的cv::Mat
,因此它继续尝试将它映射到同样失败的cv::UMat
。没有更多选项,因此您会收到一个关于UMat
的错误。与重载解析类似,在重载解析中,所有重载都不匹配,您将始终得到关于上次尝试的重载的错误。。。
import numpy as np
import cv2
imgfile = 'mi.jpg'
img = cv2.imread(imgfile,0)
tmp = img.copy()
kernel_sharpening = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])
tmp1 = cv2.pyrDown(tmp) # down sampleing
tmp2 = cv2.GaussianBlur(tmp1,(3,3),0) # bluring
tmp3 =cv2.filter2D(tmp2,-1,kernel_sharpening) # sharping
tmp3 = cv2.threshold(tmp3,127,255,cv2.THRESH_BINARY)
cv2.imshow('threshold',tmp3)
cv2.waitKey()
cv2.destroyAllWindows()