Обнаружение qr-кода OpenCV зависит от размера изображения

#python #image #opencv #qr-code #opencv-python

Вопрос:

Я использую cv2.QRCodeDetector для декодирования QR-кодов на изображениях. Я заметил, что размер изображения имеет значение для декодирования. Например, сохраните это изображение: https://i.ibb.co/QKF3wQ7/cropped.jpg (он должен быть размером 640×356)

Теперь, если вы сделаете следующее:

 detector = cv2.QRCodeDetector()
img = cv2.imread('cropped.jpg')
# img = cv2.resize(img, (0, 0), fx=0.2, fy=0.2)
decoded, points, _ = detector.detectAndDecode(img)
print('Decoded text is: ', decoded)
 

Выход:

 Decoded text is:
 

Но если вы уменьшите размер изображения (раскомментировав третью строку),:

 detector = cv2.QRCodeDetector()
img = cv2.imread('cropped.jpg')
img = cv2.resize(img, (0, 0), fx=0.2, fy=0.2)
decoded, points, _ = detector.detectAndDecode(img)
print('Decoded text is: ', decoded)
 

Выход:

 Decoded text is:  BMLF000117*0000000000007883*2021-05-27*11:15:43*43.92
 

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

Что я могу сделать, чтобы расшифровать QR-код?

Комментарии:

1. Не могу воспроизвести, и я перепробовал 5 разных версий OpenCV. Используя ваш образец изображения, он ничего не обнаруживает, независимо от масштаба.

2. Хорошо, похоже, что изображение было слишком сильно обрезано, чтобы можно было распознать вариант масштаба 0,2. Я могу заставить его работать с исходным масштабным изображением, если сначала выполню пороговое значение Otsu, а затем уничтожу результат с помощью перекрестного элемента 3×3.

3. Я не понимал такого подхода. Если бы вы могли уточнить или дать ответ, я был бы признателен. Странно, что вы не можете воспроизвести, когда загружаете изображение, какого оно размера?

4. Привет, Дэн, не могли бы вы подробнее объяснить? Мне это срочно нужно 🙂

5. Привет, Дэн, я был бы признателен, если бы у тебя было время помочь мне! 🙂