python opencv cv2.threshold(),TypeError:argument'应为cv::UMat;垫';

python 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.

上面的代码运行良好。但是,下面的代码不起作用

高于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.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
,在下面的示例中,您是thresholding
tmp3
,如果您阅读的文档,您会注意到它返回一个元组
(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()