我有一个包含100000张图像的随机数据集。
我在同一数据集上使用了以下代码,但处理速度非常慢(在AWS GPU实例中)。
import cv2
from progressbar import ProgressBar
pbar = ProgressBar()
def image_to_feature_vector(image, size=(128, 128)):
return cv2.resize(image, size).flatten()
imagePath = #path to dataset
data = []
#load images
for i in pbar(range(0,len(imagePath))):
image = cv2.imread(imagePath[i])
image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
features = image_to_feature_vector(image)
data.append(features)
如何提高处理速度?
最佳答案
真正的解决方案取决于瓶颈分析。
无论如何,图像读取(加载)时间是您可以使用的宝贵资源。
您的过程是顺序的:
在这种情况下,我使用称为IO管道或并行管道的东西。这个想法是使用一个线程来串行加载图像并将它们提供给多个处理线程。因此,在读取输入线程时,一个或多个线程正在使用CPU处理先前的图像。也可以使用一个线程来连续写出数据:
不幸的是,我没有使用python来写一些东西作为示例。该模式已经在python线程框架中实现。
我使用这种方法来抓取相机帧并进行高速处理,但是我使用了C++。如果您对使用C++编程无关紧要,则可以在impressive answer中找到启发性的东西。
关于python - 如何使用opencv和python更快地遍历大型图像数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47555670/