Python - Detect a QR code from an image and crop using OpenCV

后端 未结 3 773
不思量自难忘°
不思量自难忘° 2020-12-18 13:37

I\'m working on a project using Python(3.7) and OpenCV in which I have an Image(captured using the camera) of a document with a QR code placed on it.

This QR code ha

3条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-18 14:01

    I got the width and height data using points and compare it with the qr_data size. Then cropped the QR according to needed.

    import cv2
    import math  
    
    image = cv2.imread('/ur/image/directory/qr.jpg')
    
    qrCodeDetector = cv2.QRCodeDetector()
    decodedText, points, _ = qrCodeDetector.detectAndDecode(image)
    qr_data = decodedText.split(',')
    qr_size = qr_data[0]
    top = qr_data[1]
    right = qr_data[2]
    bottom = qr_data[3]
    left = qr_data[4]
    
    if points is not None:
        pts = len(points)
        print(pts)
        for i in range(pts):
            nextPointIndex = (i+1) % pts
            cv2.line(image, tuple(points[i][0]), tuple(points[nextPointIndex][0]), (255,0,0), 5)
            print(points[i][0])
    
        width = int(math.sqrt((points[0][0][0]-points[1][0][0])**2 + (points[0][0][1]-points[1][0][1])**2))
        height = int(math.sqrt((points[1][0][0]-points[2][0][0])**2 + (points[1][0][1]-points[2][0][1])**2))
    
        # Compare the size
        if(width==qr_data[0] and height==qr_data[0]):
            print("Sizes are equal")
        else:
            print("Width and height  " + str(width) + "x" +  str(height) + "  not equal to " 
            + str(qr_data[0]) + "x" + str(qr_data[0]))
    
        # Add the extension values to points and crop
        y = int(points[0][0][1]) - int(qr_data[1])
        x = int(points[0][0][0]) - int(qr_data[4])
        roi = image[y:y+height + int(qr_data[3]), x:x+width + int(qr_data[2])]
        print(decodedText)    
        cv2.imshow("Image", image)
        cv2.imshow("Crop", roi)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    else:
        print("QR code not detected")
    

    Result:

提交回复
热议问题