python cv2报错error: (-215:Assertion failed) dims <= 2 && step[0] > 0 in function ‘cv::Mat::locateROI‘

**python cv2报错error: (-215:Assertion failed) **

最近处理处理的一批图像要用到python的cv2这个库,在进行一些函数调用的时候老是爆出这个错,而网上的处理方式参差不齐,自己便做出一篇总结

问题描述:

在深度学习任务的后处理过程中,我的程序报了这个错

 # ----------后处理操作把tensor把tensor转成numpy,然后进行闭操作填补空洞,再转为tensor----------#

            prob = probs.cpu().numpy()
            kernel = np.ones((18, 18), dtype="uint8") / 9  # 闭操作的核为18*18
            prob = prob.astype(np.uint8)
            prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
            probs = torch.from_numpy(prob)

在这里插入图片描述
在预处理的时候报了这个错

  labelPath = os.getcwd()+"\\哈哈\\Corp2DGround\\breast_1_108_0007.png"
    imgPath = os.getcwd()+"\\哈哈\\newTestData\\breast_1_108_0007.jpg"
    img = cv2.imread(imgPath)
    label = cv2.imread(labelPath)
    #首先使用固定阈值
    ret , th1 = cv2.threshold(img,80,255,cv2.THRESH_BINARY)
    # cv2.imwrite('1.png',th1)
    # print(type(th1))
    # print(type(label))
    #----------------th1表示的阈值为80的图像,且大于80255,小于800------------#
    bitwithAnd = cv2.bitwise_and(label,th1)

在这里插入图片描述


原因分析:

第一个错的话就是通道数不匹配,例如在深度学习中输出的图像的shape为[1,2,512,512]然后送入到cv2进行处理,就会报这个错。如果使用的torch的话可以调用torch.squeeze进行压缩,处理完之后再进行unsqueeze操作就行在我的上面处理方式是这样:
 			probs = torch.squeeze(probs,dim=0)
            prob = probs.cpu().numpy()
            kernel = np.ones((18, 18), dtype="uint8") / 9  # 闭操作的核为18*18
            prob = prob.astype(np.uint8)
            prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
            probs = torch.from_numpy(prob)
            probs = torch.unsqueeze(probs,dim=0) 

如果在numpy中也会出现这个问题,像下面这种

 	kernel = np.ones((5,5),dtype="uint8")/9
    bitwithAnd = np.ones((1,1,352,352),dtype="uint8")
    closing = cv2.morphologyEx(bitwithAnd,cv2.MORPH_CLOSE,kernel)

也可以使用numpy的squeeze操作。

针对第二个问题的话,大家都看出来了,那个目录里面包含着中文的字符,常见的操作就是全部都改成英文,python的opencv对中文字符较为敏感。如果还是不行的话,可以使用os.getcwd()获取当前目录地址,然后后面跟文件在当前目录下的相对地址,就可以解决。在这里插入图片描述


python的opencv报bug在这个博客会持续更新,目前是就遇到这两个,在网上的解决方式都不一定有效时写了这篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值