Real-time QR code detection + positioning based on opencv4.0 pyzbar and python

Real-time QR code detection + positioning based on opencv4.0 pyzbar and python

1. Write in front

opencv4.0 has finally been released, and the projects that should be visualized in the future are all based on opencv4.0 version, so now it is also upgraded to version 4.0, the specific difference from version 3.0 is very small, you can check here for details .

2. Preliminary preparation

opencv 4.0(3.0)

python 3.8

pizbar

3. Effect demonstration

If the QR code is Chinese utf-8 characters, it cannot be displayed on the image by using opencv. Children's shoes in need can use matplotlib to display the image.

4. Achieve goals

The camera is used to complete the real-time recognition, detection and positioning of the two-dimensional code, and obtain the center point and the smallest circumscribed rectangle of the two-dimensional code.

5. Code

import cv2
from pyzbar import pyzbar
#二维码动态识别
camera=cv2.VideoCapture(0)
camera.set(3,1280) #设置分辨率
camera.set(4,768)
while True:
    (grabbed,frame)=camera.read()
    #获取画面中心点
    h1,w1= frame.shape[0],frame.shape[1]

    # 纠正畸变(这里把相机标定的代码去除了,各位自行标定吧)
    dst = frame

    # 扫描二维码
    text = pyzbar.decode(dst)
    for texts in text:
        textdate = texts.data.decode('utf-8')
        print(textdate)
        (x, y, w, h) = texts.rect#获取二维码的外接矩形顶点坐标
        print('识别内容:'+textdate)

        # 二维码中心坐标
        cx = int(x + w / 2)
        cy = int(y + h / 2)
        cv2.circle(dst, (cx, cy), 2, (0, 255, 0), 8)  # 做出中心坐标
        print('中间点坐标:',cx,cy)
        coordinate=(cx,cy)
        #在画面左上角写出二维码中心位置
        cv2.putText(dst,'QRcode_location'+str(coordinate),(20,20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
        #画出画面中心与二维码中心的连接线
        cv2.line(dst, (cx,cy),(int(w1/2),int(h1/2)), (255, 0, 0), 2)
        #cv2.rectangle(dst, (x, y), (x + w, y + h), (0, 255, 255), 2)  # 做出外接矩形
        #二维码最小矩形
        cv2.line(dst, texts.polygon[0], texts.polygon[1], (255, 0, 0), 2)
        cv2.line(dst, texts.polygon[1], texts.polygon[2], (255, 0, 0), 2)
        cv2.line(dst, texts.polygon[2], texts.polygon[3], (255, 0, 0), 2)
        cv2.line(dst, texts.polygon[3], texts.polygon[0], (255, 0, 0), 2)
        #写出扫描内容
        txt = '(' + texts.type + ')  ' + textdate
        cv2.putText(dst, txt, (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 50, 255), 2)


    cv2.imshow('dst',dst)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按q保存一张图片
        cv2.imwrite("./frame.jpg", frame)
        break

camera.release()
cv2.destroyAllWindows()

Just run the code directly, suitable for opencv3.x and 4.x versions

6. Epilogue

This project is used to realize the positioning of a robot using vision and QR code labels, and now the initial simple functions have been realized

 

My blog: https://blog.dgut.top/

Guess you like

Origin blog.csdn.net/dgut_guangdian/article/details/106860637