QR二维码识别(opencv4版本)


1、先在https://cli.im/text生成需要识别的二维码。

2、调用opencv4中的QRCodeDetector类中的函数detectAndDecode进行识别。

代码QR.cpp如下:

#include<iostream>
#include<opencv2/opencv.hpp>
 
using namespace cv;
using namespace std;

void display(Mat &im, Mat &bbox)
{
  int n = bbox.rows;
  cout << "bbox.rows = " << bbox.rows <<"-" << bbox.cols << endl;
 
  for(int i = 0 ; i < n ; i++)
  {
    line(im, Point2i(bbox.at<float>(i,0),bbox.at<float>(i,1)), Point2i(bbox.at<float>((i+1) % n,0), bbox.at<float>((i+1) % n,1)), Scalar(255,0,0), 3);
    cout << bbox.at<float>(i,0) << " "<< bbox.at<float>(i,1) << "+ " << bbox.at<float>((i+1) % n,0) << " " << bbox.at<float>((i+1) % n,1) << endl;
  }
  imshow("Result", im);
}


int main(int argc, char* argv[])
{
  // Read image
  Mat inputImage;
  if(argc>1)
    inputImage = imread(argv[1]);
  else
    inputImage = imread("qrcode-learnopencv.jpg");

  //QRCodeDetector qrDecoder = QRCodeDetector::QRCodeDetector();
  QRCodeDetector qrDecoder;

  Mat bbox, rectifiedImage;

  std::string data = qrDecoder.detectAndDecode(inputImage, bbox, rectifiedImage);
  if(data.length()>0)
  {
    cout << "Decoded Data : " << data << endl;

    display(inputImage, bbox);
    rectifiedImage.convertTo(rectifiedImage, CV_8UC3);
    imshow("Rectified QRCode", rectifiedImage);

    waitKey(0);
  }
  else
    cout << "QR Code not detected" << endl;
}

 

CMakelists.txt编写:

cmake_minimum_required(VERSION 2.8)
project(QR)

set( CMAKE_BUILD_TYPE "Release" )
#set( CMAKE_CXX_FLAGS "-11" )
#set C++11
set(CMAKE_CXX_STANDARD 14)

#include_directories( "/usr/local/include/opencv4" )
#set(OpenCV_DIR "/usr/local/lib")

set(OpenCV_DIR /usr/local)

include_directories(
    ${OpenCV_DIR}/include
)

find_package(OpenCV 4 REQUIRED)
message("Found OpenCV: ${OpenCV_INCLUDE_DIRS}, ${OpenCV_LIBRARIES}")

add_executable(QR QR.cpp)
target_link_libraries(QR
    ${OpenCV_LIBRARIES}
)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM