Применение трансформации к изображению на основе QR-кодаPython

Программы на Python
Ответить
Anonymous
 Применение трансформации к изображению на основе QR-кода

Сообщение Anonymous »

Мне хотелось бы исправить перспективу и масштаб изображения. Изображение содержит QR-код (известного размера EXPECTED_QR_SIZE), и я использую функции OpenCV для обнаружения QR-кода и применения коррекции перспективы и масштабирования к полному изображению.

Код: Выделить всё

import cv2
import numpy as np

EXPECTED_QR_SIZE = 148

image = cv2.imread('page_1.jpg')

# Detect the QR code in the image
qrCodeDetector = cv2.QRCodeDetector()
retval, decoded_info, points, straight_qrcode = qrCodeDetector.detectAndDecodeMulti(image)
points = points.astype(int)
# Define the destination points for the perspective transformation
dest_pts = np.array([[0, 0], [EXPECTED_QR_SIZE-1, 0], [EXPECTED_QR_SIZE-1, EXPECTED_QR_SIZE-1], [0, EXPECTED_QR_SIZE-1]], dtype='float32')
M = cv2.getPerspectiveTransform(points.astype('float32'), dest_pts)

###
#EDIT : The line below solves the issue
###
M = np.dot(M, np.array([[1, 0, +points[0][1][0]], [0, 1, +points[0][1][1]], [0, 0, 1]]))

# Transformed the image and display it
transformed_image = cv2.warpPerspective(image, M, (image.shape[1], image.shape[0]))
cv2.imshow('Image', transformed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Вот исходное изображение
Изображение
Когда я запускаю приведенный выше код, QR-код исправляется, но все изображение смещается, как показано ниже.
Изображение

РЕДАКТИРОВАТЬ
Добавление

Код: Выделить всё

M = np.dot(M, np.array([[1, 0, +points[0][1][0]], [0, 1, +points[0][1][1]], [0, 0, 1]]))
Выполняет свою работу!


Подробнее здесь: https://stackoverflow.com/questions/791 ... -a-qr-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»