1

我正在尝试从模糊图像中检测 QR 数据,但到目前为止还没有成功。

图片

我在图像上尝试了几个形态学操作,但仍然没有得到嵌入其中的数据。

我怎样才能改善这种情况?

到目前为止,我已经尝试过:

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/barcode.hpp>

int main() {
  cv::Mat imageMat = cv::imread("/Users/apple/Downloads/36.jpg");
  if(imageMat.empty()) {
    std::cout << "Image not present and can not be opened" << std::endl;
    return 0;
  }

  cv::Mat     imageGray, imageBlur, imageCanny, imageDilated, imageEroded, thresholdImage;
  cv::cvtColor(imageMat, imageGray, cv::COLOR_BGR2GRAY);
  cv::GaussianBlur(imageGray, imageBlur, cv::Size(3,3), 3, 0);
  std::cout << "Gaussian blur done" << std::endl;
  // cv::Canny(imageBlur, imageCanny, 25, 75);
  cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
  cv::dilate(imageBlur, imageDilated, kernel);
  cv::erode(imageDilated, imageEroded, kernel);
  cv::threshold(imageEroded, thresholdImage, 5, 255, cv::THRESH_BINARY+cv::THRESH_OTSU);
  std::cout << "Threshold done" << std::endl;

  // Reads the barcode/dat
  cv::QRCodeDetector qrDecoder;
  std::string decodedData = qrDecoder.detectAndDecode(thresholdImage);
  std::cout << "Decoded data =  " << decodedData << std::endl;

此代码不会从具有模糊 QR 码的图像中解码数据。你们更喜欢什么让图像不模糊并嵌入其中的数据?增加对比度?增加亮度?任何文件也可以提供帮助。

先感谢您。

4

0 回答 0