【问题标题】:opencv QRCodeDetector throw Exception?opencv QRCodeDetector 抛出异常?
【发布时间】:2020-12-07 01:58:05
【问题描述】:

我正在编写一个 C++ 程序来测试阅读 QRCode,这是我非常小的代码片段:

cv::Mat m = cv::imread("fail.png");
cv::QRCodeDetector d;
std::vector<cv::Point> ps;
d.detect(m, ps);
if (ps.size() > 0) {
    std::cout << d.decode(m, ps) << std::endl;
}

我尝试使用下图对其进行测试:

我在 d.decode() 上遇到了异常,有人知道避免这种情况吗?

环境: Visual Studio 2015,Opencv 4.0.0

【问题讨论】:

  • 什么你遇到了异常?我还建议将您的 OpenCV 更新到最新版本。 4.0.0 已经两年了,从那时起已经有很多错误修复和改进。
  • barcode-main.exe 中 0x00007FF86152ED29 (ntdll.dll) 处未处理的异常:0xC0000374:堆已损坏(参数:0x00007FF8615987F0)。稍后将尝试更新opencv。
  • 在opencv 4.5.0版本上可以,但是需要使用detectAndDecode()来检测二维码,并且在detect()之后使用decode()返回一个空字符串
  • 不知道发生了什么。无法重现。据我所知,这应该可以工作。这在我的旧 4.1.1 设置上工作得很好(在 python 中,但那是一样的)。 points 向我展示了四个角。解码给了我字符串WeCanOverCome. 和代码位矩阵。尝试使用Mat 而不是vector。也许它为此感到困扰。
  • 不知道为什么,但无论如何感谢 Christoph。

标签: c++ opencv qr-code


【解决方案1】:

我刚刚在 C++ 中重现了这种行为,带有角点的类型:

  • std::vector&lt;cv::Point&gt; 是整数
  • std::vector&lt;cv::Point2d&gt; 是浮点数(双精度)
  • cv::Mat 获取由 detect() 分配的类型以适应

整数点失败,其他两个有效。

这可能是一个错误,或者只是文档失败。随时将最小的完整复制代码和数据发布到OpenCV's github issues

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2014-01-05
    • 2013-05-24
    • 2011-05-30
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多