检测到 OpenCv QR-Code 但无法解码
OpenCv QR-Code is detected but can't be decoded
我用OpenCV写了一个简单的QrCode检测解码代码
但我面临的问题是二维码被检测到但无法用下图解码(见底部)。
我写的代码是这样的:
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;
}
我用OpenCV写了一个简单的QrCode检测解码代码
但我面临的问题是二维码被检测到但无法用下图解码(见底部)。
我写的代码是这样的:
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;
}