在OpenCV中是否可以使用GPU处理图像?

6

所以,我从我的大学得到了一个与Python相关的任务。我们需要获取一组图像(来自文件夹),然后尽可能快地调整它们的大小。因此,我使用了cv2 resize选项来完成这个任务。但是,显然我们可以使用GPU更快地完成它。但不幸的是,我无法找到使用openCV模块完成它的最佳方法。

我找到了这段代码,但它与openCV无关。

import numpy as np
from timeit import default_timer as timer
from numba import vectorize

@vectorize(['float32(float32, float32)'], target='cuda')
def pow(a, b):
    return a ** b

def main():
    vec_size = 100000000

    a = b = np.array(np.random.sample(vec_size), dtype=np.float32)
    c = np.zeros(vec_size, dtype=np.float32)

    start = timer()
    c = pow(a, b)
    duration = timer() - start

    print(duration)

if __name__ == '__main__':
    main()

编辑: 我发现了一个叫做“UMat”的东西,使用它有什么好处? 我尝试在我的代码中这样使用:

image = cv2.UMat(cv2.resize(image, (0, 0), fx=0.5, fy=0.5)) # Resize image by half
1个回答

4

谢谢您的回复。我发现了一个叫做“UMat”的东西。它是什么? - lol
我认为它只是说明了Mat数据存储在哪里 - 常规、专用或共享内存,但并不一定意味着它是在GPU上计算的。 - kocica
那么它可以使用GPU(图形处理器)吗? - lol
1
是的。请仔细阅读此链接 - kocica
好的,我已经阅读了。但它并没有提到GPU方面的内容。只是说该模块将正确的任务发送到计算机的正确部分(CPU、GPU等),但当我尝试在使用UMat时测量时间时,并没有任何区别。 - lol
如果使用UMat,库将自动使用GPU优化(如果可用)。看起来你的计算机不支持其中的某些部分。正如我所说,这取决于文章中描述的许多因素。这意味着它将使用最佳的硬件,但并不一定意味着它将在任何地方都运行在GPU上。强制OpenCV使用gpu的唯一方法是,如我在回答GPU模块中所述,只有在C++中才能使用。 - kocica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接