QR-код OpenCv обнаружен, но не может быть декодирован - PullRequest
0 голосов
/ 05 февраля 2020

Я написал простой код обнаружения и декодирования QrCode с помощью OpenCV.
Но проблема, с которой я сталкиваюсь, заключается в том, что QR-код обнаруживается, но не может быть декодирован с помощью следующего изображения (см. Внизу).

Код, который я написал, выглядит следующим образом:

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;
   }

Кто-нибудь знает, почему QR-код может быть обнаружен, но не декодирован?

Вот изображение, которое я использовал:

enter image description here

Редактировать: я немного больше искал об обнаружении QR-кода с помощью OpenCv и нашел это кодовые фрагменты из: https://docs.opencv.org/3.4.9/de/dc3/classcv_1_1QRCodeDetector.html

setEpsX(double epsX)
setEpsY(double epsY)

к сожалению, документация очень плохая, так что кто-нибудь знает, что это за эти 2 параметра и могут ли они решить мою проблему?

1 Ответ

0 голосов
/ 07 февраля 2020

Мне кажется, я нашел проблему:
Используемое изображение имеет размер 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;
}
...