cv::findContours()的奔溃解决方案

1 篇文章 0 订阅
1 篇文章 0 订阅

1 遇到的问题

之前用opencv的python版本的查找轮廓函数cv2.drawContours()没有报错,但是同样的代码,用opencv的C++版本的查找轮廓函数cv::drawContours()实现了一遍,竟然报错了,而且程序老奔溃,一直提示内存有问题!!!

2 我的疑惑

这个问题困扰了我整整两天,网友说这是opencv库的bug等,众说纷纭,但是我用的最近的版本啊,按道理说不应该啊,要是历史遗留问题应该早就解决了啊。

3 尝试的方法

3.1 网友总结的解决方案

网友给的所有建议,一二三四五六七八条,太多了,我就不当搬运工了,我都试过了,是不行滴!

3.2 降低opencv版本

然后我看到说降版本好使,我又从4.6.0降低到3.4.0还是不行,又看到说3.0一下的版本可以用,我又降级到2.4.9,最终还是不行!!!

3.3 查看官方文档

最后我查看官方文档,我写的存放轮廓的容器形式和官方文档给出来的一样啊,std::vector<std::vectorcv::Point> vecConts;哪出错了?(给大家一个官方文档链接链接: https://docs.opencv.org/4.6.0/d3/dc0/group__imgproc__shape.html#gadf1ad6a0b82947fa1fe3c3d497f260e0

4 最终的解决方案

最终,我尝试在查找轮廓之前,先对图像进行一个canny边缘检测,然后用得到的图像再进行轮廓查找,没想到竟然不奔溃了!!!哈哈,撒花,庆祝一下!累了一天了,准备收工回家,想想,还是记录一下,万一有同学也遇到了呢?
废话不多说,上一下不崩溃的代码:
部分代码如下

// canny边缘检测
cv::Mat im_canny;
cv::Canny(im_bin, im_canny, 50, 100);
// 查找轮廓
std::vector<std::vector<cv::Point>> vecConts;
cv::findContours(im_canny, vecConts, cv::RETR_LIST, cv::CHAIN_APPROX_NONE);
std::cout << "轮廓数量:" << vecConts.size() << endl;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值