Python CV2 OpenCL,CV2.UMat对象不可编辑
我正在使用pyzbar库解码QR码。现在我正在尝试使用uMat使这个过程更快。问题是pyzbar解码无法接受umat变量 文件“C:\Python\lib\site packages\pyzbar\pyzbar.py”,第175行,解码 像素、宽度、高度=图像 TypeError:“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
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)