Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CV2 OpenCL,CV2.UMat对象不可编辑_Python_Python 3.x_Opencv_Opencl_Cv2 - Fatal编程技术网

Python CV2 OpenCL,CV2.UMat对象不可编辑

Python CV2 OpenCL,CV2.UMat对象不可编辑,python,python-3.x,opencv,opencl,cv2,Python,Python 3.x,Opencv,Opencl,Cv2,我正在使用pyzbar库解码QR码。现在我正在尝试使用uMat使这个过程更快。问题是pyzbar解码无法接受umat变量 文件“C:\Python\lib\site packages\pyzbar\pyzbar.py”,第175行,解码 像素、宽度、高度=图像 TypeError:“cv2.UMat”对象不可编辑 这是我的代码示例 import cv2 import numpy as np from pyzbar.pyzbar import decode import matplotlib.p

我正在使用pyzbar库解码QR码。现在我正在尝试使用uMat使这个过程更快。问题是pyzbar解码无法接受umat变量

文件“C:\Python\lib\site packages\pyzbar\pyzbar.py”,第175行,解码 像素、宽度、高度=图像 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()

IU猜测该错误的原因可以在pyzbar的decode文档中找到:

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支持的mat实例填充。UMat格式不能满足此要求,因此会出现错误。

UMat
不仅仅是一个numpy数组,它是一个OpenCV类。你为什么在OpenCV之外使用它?谢谢,现在我明白我的错误了。有没有办法将UMat重新格式化为numpy?@ADIN只是一开始不要将ndarray转换为UMat?@Georgy我没有在本例中显示我的代码的其余部分,其中包含可以通过UMat改进的cv2操作。@Jeruuke我仍然想知道如何反转此过程。uMat>ndarray@ADIN您可以按照以下指令从UMat传递到numpy:yourmat=cv2.UMat.get(yourumat)