所以,我从我的大学得到了一个与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
Mat
数据存储在哪里 - 常规、专用或共享内存,但并不一定意味着它是在GPU上计算的。 - kocicaUMat
,库将自动使用GPU优化(如果可用)。看起来你的计算机不支持其中的某些部分。正如我所说,这取决于文章中描述的许多因素。这意味着它将使用最佳的硬件,但并不一定意味着它将在任何地方都运行在GPU上。强制OpenCV使用gpu的唯一方法是,如我在回答GPU模块中所述,只有在C++中才能使用。 - kocica