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