使用OpenCV检测和解码图像中的QR码

QR code是一种二维条码,它存储编码数据。它可以是一个网站的URL,位置坐标,电子邮件地址,纯文本等。二维码可以比同等大小的线性条码存储更多的数据。

本教程提供了一个如何使用OpenCV检测和解码图像中的QR码的例子。

我们创建一个 QRCodeDetector类的对象。通过使用 detectAndDecode方法来检测和解码QR码。它允许获得解码的数据和找到的QR码的顶点数组。

import cv2

img = cv2.imread('test.jpg')

decoder = cv2.QRCodeDetector()
data, points, _ = decoder.detectAndDecode(img)

if points is not None:
    print('Decoded data: ' + data)

    points = points[0]
    for i in range(len(points)):
        pt1 = [int(val) for val in points[i]]
        pt2 = [int(val) for val in points[(i + 1) % 4]]
        cv2.line(img, pt1, pt2, color=(255, 0, 0), thickness=3)

    cv2.imshow('Detected QR code', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread("test.jpg");

    QRCodeDetector decoder = QRCodeDetector();
    std::vector<Point> points;
    std::string data = decoder.detectAndDecode(img, points);

    if (!points.empty()) {
        std::cout << "Decoded data: " << data << std::endl;

        for (int i = 0; i < points.size(); i++) {
            Point pt1 = points[i];
            Point pt2 = points[(i + 1) % 4];
            line(img, pt1, pt2, Scalar(255, 0, 0), 3);
        }

        imshow("Detected QR code", img);
        waitKey(0);
        destroyAllWindows();
    }

    return 0;
}
package app;

import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.QRCodeDetector;

public class Main
{
    static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    public static void main(String[] args)
    {
        Mat img = Imgcodecs.imread("test.jpg");

        QRCodeDetector decoder = new QRCodeDetector();
        Mat points = new Mat();
        String data = decoder.detectAndDecode(img, points);

        if (!points.empty()) {
            System.out.println("Decoded data: " + data);

            for (int i = 0; i < points.cols(); i++) {
                Point pt1 = new Point(points.get(0, i));
                Point pt2 = new Point(points.get(0, (i + 1) % 4));
                Imgproc.line(img, pt1, pt2, new Scalar(255, 0, 0), 3);
            }

            HighGui.imshow("Detected QR code", img);
            HighGui.waitKey(0);
            HighGui.destroyAllWindows();
        }

        System.exit(0);
    }
}

如果发现了二维码,我们就打印解码数据,并在检测到的二维码周围画一个边界框。

Decoded data: https://lindevs.com
使用OpenCV检测和解码图像中的QR码

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论