Python opencv findContours报错

在刚开始使用opencv python 的时候,出现了不少的问题。现在来总结一下遇到的问题以及其解决方法

一开始,出现了这个问题:

FindContours supports only CV_8UC1 images

对于这个问题,应该就是图片的格式的问题,但是我是打算使用的是从神经网络里面输出的掩膜,而且我也不太熟悉,也不知道该怎么弄,发现网上的人并没有很多解决这个问题的方法,所以我就尝试去使用cvtcolor来转化一下看看行不行

但是当我使用了cvtColor的时候,我又发现问题了:

only size-1 arrays can be converted to Python scalars

对于这个问题就应该是数据的格式的问题了,但是我要处理的是我的网络的输出结果啊??网上面也没有太多解决这个问题的方法

最后我就用了一个非常笨的方法来解决这个问题了×(有时间在看看怎么样解决吧,公司项目不能拖太久==)

首先,我把这个掩膜按照图片输出

cv2.imwrite(os.path.join(BIT_OUT,name),mask.astype(np.uint8))

按照图片输出了以后,就可以按照网上的普遍的方法来处理了

img = cv2.imread(os.path.join(BIT_OUT, each_small))
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

        image, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

我必须承认。这是一个很笨的方法

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PythonOpenCV是一对非常强大的组合,在计算机视觉领域中广泛使用。在OpenCV的findContours方法中,可以找到二值图像中的所有轮廓。而裁剪则是指从图像中选择感兴趣的部分进行处理。因此,PythonOpenCV可以用来裁剪图像中的轮廓。 要裁剪一个轮廓,需要先使用findContours方法找到它。然后可以使用boundingRect方法获取轮廓的矩形框。这个矩形框可以用作裁剪的区域。如果要裁剪原始图像,则可以使用原始图像中对应的像素坐标来裁剪。 下面是一个示例代码,用于裁剪图像中的轮廓: ``` python import cv2 # 读取图像 img = cv2.imread('image.jpg') # 转换成灰度图像 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 获取所有轮廓 contours, hierarchy = cv2.findContours(gray_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 对每一个轮廓进行裁剪 for contour in contours: # 获取轮廓的矩形框 x, y, w, h = cv2.boundingRect(contour) # 裁剪原始图像 cropped_img = img[y:y+h, x:x+w] # 显示裁剪后的图像 cv2.imshow('Cropped Image', cropped_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码中,使用了findContours方法获取二值图像中的所有轮廓。然后使用boundingRect方法获取每一个轮廓的矩形框,最后使用原始图像中的像素坐标来裁剪。通过循环操作,可以对每一个轮廓进行裁剪,并显示裁剪后的图像。 总之,PythonOpenCV的组合可以很方便地实现图像处理中的各种任务,如图像裁剪等。通过掌握常用的方法和技巧,可以更加高效地完成图像处理工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值