c++ - 检测到 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)
不幸的是,文档非常糟糕,所以那些人知道这两个参数是什么以及他们是否可以解决我的问题?
解决方案
我想我发现了问题:
我使用的图像大小为 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;
}
推荐阅读
- apache-spark - 我们可以在 GKE 上的不同节点池上安排 spark 驱动程序和执行程序吗?
- spring-security - Keycloak spring-security Adapter: antMatchers("/**").authenticated() 没有启动认证过程
- javascript - 如何在文本和表格之间切换?
- hadoop - HDFS 的 HUE 和 Job Scheduler 安装
- wordpress - Wordpress 添加具有 3 个以上子菜单的管理菜单
- java - 尝试使用java从webapp在datalake中创建文件
- c# - 如何为组合框设置默认值?
- java - 提示时数据库表不更新
- scala - 除了 Play Framework 中的可读性之外,还有什么理由使用 Action.async 吗?
- java - androidx.appcompat.widget.SearchView setSearchableInfo() 在某些设备上抛出 Resources$NotFoundException