Python как захватить обнаруженный QR-код? - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над проектом с использованием PythoN (3.7) и OpenCV, в котором мне нужно обнаружить QR-код из Image / LiveStream, а затем мне нужно взять обнаруженный QR-код как отдельное изображение, и этот QR Код содержит размер этого изображения QR-кода, поэтому мне нужно взять его как отдельное изображение и сравнить его размер с декодированным размером этого изображения QR-кода.

Обновление:

Вот что у меня есть: у меня есть изображение документа с QR-кодом. На самом деле этот QR-код будет содержать следующую информацию:

  • 4 переменных (вверху , справа, снизу, слева)
  • Размер изображения QR-кода (например, 10 пикселей означает, что изображение QR-кода составляет 10x10 пикселей)

Вот чего я хочу добиться:

  • Я хочу обнаружить QR-код и декодировать (когда я декодирую, я получу его размер изображения)
  • Затем я должен сохранить обнаружение QR-кода (выделенная область) как отдельное обрезанное изображение .
  • Наконец, мне нужно сравнить размер обрезанного изображения с размером QR-кода (который я получаю после декодирования)

Вот пример ввода и вывода изображения:

Ввод: enter image description here

Выход: enter image description here

Я закончил с QR обнаружение кода, но как я могу захватить эту конкретную область как отдельное изображение и сравнить ее размер с другим размером, который будет внутри этого QR-кода?

Вот что я сделал до сих пор:

import cv2


# read the image
image = cv2.imread('/Users/abdul/PycharmProjects/QScanner/images/second.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]

print(f'Size: {qr_size}' + str(qr_data[5]))
print(f'Top: {top}')
print(f'Right: {right}')
print(f'Bottom: {bottom}')
print(f'Left: {left}')
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])

    print(decodedText)    

    cv2.imshow("Image", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


else:
    print("QR code not detected")
...