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