Объект CV2 OpenCL, cv2.UMat не является итерируемым

61
4

Я использую библиотеку pyzbar для декодирования QR-кодов. Теперь я пытаюсь использовать uMat, чтобы сделать этот процесс более быстрым. Проблема заключается в том, что декодирование pyzbar не может принимать переменную umat.

Файл "C:\Python\lib\site-packages\pyzbar\pyzbar.py", строка 175, в пикселях декодирования, width, height = image TypeError: объект cv2.UMat не является итерируемым

Вот мой пример кода

import cv2
import numpy as np
from pyzbar.pyzbar import decode
import matplotlib.pyplot as plt

cv2.ocl.setUseOpenCL(True)

for subdir, dirs, files in os.walk("Images"):
for file in sorted(files):
filepath = subdir + os.sep + file
if filepath.endswith(".JPG"):

image = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)
image = cv2.UMat(image)

symbols = decode(image)

if symbols:
plt.title(symbols[0][0])
plt.imshow(image)
plt.show()

спросил(а) 2021-01-19T17:47:02+03:00 2 месяца, 3 недели назад
1
Решение
62

Я думаю, причина этой ошибки может быть найдена в документации по декодированию из pyzbar:

def decode(image, symbols=None, scan_locations=False):
"""Decodes datamatrix barcodes in 'image'.
Args:
image: 'numpy.ndarray', 'PIL.Image' or tuple (pixels, width, height)
symbols (ZBarSymbol): the symbol types to decode; if 'None', uses
'zbar' default behaviour, which is to decode all symbol types.
scan_locations (bool): If 'True', results will include scan
locations.

Декодирование ожидает изображение или матрицу, содержащую данные в определенном порядке, который заполняется экземпляром mat-instance, поддерживаемым OpenCV. Формат UMat не заполняет это требование, поэтому ошибка будет происходить.

ответил(а) 2021-01-19T17:47:02+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема