首页 > 解决方案 > 检测到 OpenCv QR-Code 但无法解码

问题描述

我用 OpenCV 写了一个简单的二维码检测和解码代码。
但我面临的问题是二维码被检测到但无法用下图解码(见底部)。

我写的代码是这样的:

int main(int argc, char* argv[])
{
   cv::Mat src = imread("scaled.png");

   if(src.empty())
   {
      cout << "can not open " << "Picture" << endl;
      return -1;
   }

   QRCodeDetector qrDecoder = QRCodeDetector();

   std::string data;

   data = qrDecoder.detectAndDecode(src);

   if(data.length()>0)
   {
       cout << "data: " << data;     //data should be STOP 
   }

   return 0;
   }

有人知道为什么可以检测到二维码但无法解码吗?

这是我使用的图像:

在此处输入图像描述

编辑:我已经搜索了更多关于使用 OpenCv 进行 QR 码检测的信息,并发现这些代码片段来自:https ://docs.opencv.org/3.4.9/de/dc3/classcv_1_1QRCodeDetector.html

setEpsX(double epsX)
setEpsY(double epsY)

不幸的是,文档非常糟糕,所以那些人知道这两个参数是什么以及他们是否可以解决我的问题?

标签: c++opencvqr-code

解决方案


我想我发现了问题:
我使用的图像大小为 2400x1600,解码起来太大了。因此,我在解码图像之前调整了图像的大小,因此我的代码如下所示:

int main(int argc, char* argv[])
{
   cv::Mat src = imread("scaled.png");

   if(src.empty())
   {
      cout << "can not open " << "Picture" << endl;
      return -1;
   }
   std::string data;
   cv::resize(src,src, cv::Size(1600,1200));
   QRCodeDetector qrDecoder = QRCodeDetector();



   data = qrDecoder.detectAndDecode(src);

   if(data.length()>0)
   {
      cout << "data: " << data;     //data should be STOP 
   }

   return 0;
}

推荐阅读