CV2 OpenCL, объект cv2.UMat не повторяется - PullRequest
0 голосов
/ 06 июля 2018

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

Файл "C: \ Python \ lib \ site-packages \ pyzbar \ pyzbar.py", строка 175, в декодировании пикселей, ширина, высота = изображение Ошибка типа: объект '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()

1 Ответ

0 голосов
/ 06 июля 2018

Я думаю, причину этой ошибки можно найти в документации по декодированию из 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`'s default behaviour, which is to decode all symbol types.
    scan_locations (bool): If `True`, results will include scan
        locations.

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

...