首页 > 解决方案 > 如何将此 for 循环转换为 Python 列表理解?

问题描述

我的问题是两个部分,但首先是一些背景。

我正在尝试遍历图像列表,并基本上使用 cv2.resize 标准化每个图像的大小。我使用以下 for 循环成功地做到了这一点,但图像数量增加了,并且将继续这样做,导致我的内核崩溃。我尝试在 Spyder (Python 3.7) 和 Jupyter Notebook 中运行此代码,但无济于事。

for i in range(len(image_list)):
    image_list[i] = cv2.resize(image_list[i], (200,200))

列表理解对我来说不是很直观。但是,我尝试转换上面的代码但没有成功。这是我的尝试:

image_list2 = [cv2.resize(image_list, (200,200)) for i in range(len(image_list))]
  1. 我应该对第二个代码块进行哪些更改?
  2. 将第一个代码块(for循环)转换为列表理解是否有助于避免我的内核崩溃?我相信我在“image_list”中存储了如此多的图像,从而使 CPU 上的 RAM 过载——目前约为 50,000,但这个数字可能会增加三倍。

提前感谢您的帮助,非常感谢。

标签: pythonopencvlist-comprehensionimage-resizing

解决方案


您的第一个代码似乎也错误。你不应该调整大小image_list,你应该调整大小image_list[i]

对于第二个代码块,

image_list2 = [cv2.resize(image, (200,200)) for image in image_list]

我不太确定列表理解是否会解决您的问题。每次迭代都将新调整大小的图像保存在文件中并稍后加载如何?


推荐阅读