成功解决OpenCV报错 error: (-215) src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3))
in function cv::adaptiveThresh,类似问题解决办法都适用
报错内容
我的报错是:
error: (-215) src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3))
in function cv::adaptiveThresh
我的报错函数指向cv::adaptiveThresh
函数,如果你的报错内容和我大致相同,只是报错函数不同的话,可以尝试我的解决办法。
报错的部分代码
img = cv2.imread('dog.jpg') #读取图像
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2) #自适应图像阈值处理
分析报错
这种报错原因就是src的类型不匹配,src是你的函数的输入图像(或输入数组),那么就需要检查函数的输入图像(或输入数组)需要什么类型。
比如,我的报错是因为adaptiveThresh()函数只能输入灰度图像,而不能接收彩色图像。所以需要将输入图像转换为灰度图像。
解决
方法一:
img = cv2.imread('dog.jpg',0) #读取灰度图像,(第二个参数为0时,直接将彩色图像转换为灰度图)
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2) #自适应图像阈值处理
方法二:
img = cv2.imread('dog.jpg') #读取彩色图像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图像
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2) #自适应图像阈值处理
这两种方法都可以将彩色图像转换为灰度图像。
-
如果你的也是输入的图像,直接按照我的方法转化为灰度图就可以了;
-
如果你的是输入的数组元素,那么就考虑数组的维度、形状、数据类型是否有问题。
<原创不易,留个赞或评论支持一下我吧^^>
如有疑问,欢迎批评指正^^