如何在 python 中将充满图像的目录调整为所需的宽度和高度?

How can I resize a directory full of images to desired width and height in python?

我正在编写一个 python 脚本来将目录中的所有图像调整为设置的宽度和高度。我的问题是它在使用 cv2.resize() 时无法正确读取我的图像。我知道网上有解决方案,我可以简单地复制和粘贴并继续使用,但我不是那样学习的。非常感谢任何帮助,因为我在这里不仅是为了被嘲笑,也是为了学习。

我遍历了目录以确保它确实看到了文件名和扩展名。 而不是使用 height = 28 和 width = 28 我试过用 高度= np.size(img, 0) 和宽度= np.size(img, 1)

# This is my code. I loop through my directory of images using i to represent the file and attempt to resize it to 28x28
import cv2
import os
import numpy as np

width = 28
height = 28

for i in os.listdir("C:/Users/ryan/PycharmProjects/ML_Projects_fixed/Red"):
    img = cv2.imread(i)
    img = cv2.resize(img, (width, height))
    cv2.imwrite(i, img)

我收到这个错误,这对我来说意味着我没有看到图像:

回溯(最近调用最后): 文件 "C:/Users/ryan/PycharmProjects/ML_Projects_fixed/resize_test.py",第 10 行,位于 cv2.resize(img, (宽, 高)) cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3718: 错误: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

但是当我这样做的时候

for i in os.listdir("C:/Users/ryan/PycharmProjects/ML_Projects_fixed/Red"):
     print(i)

我得到了我所有的文件名+扩展名 例子: 096.png 097.png 098.png 099.png

为什么它告诉我它看不到图像?

编辑1;

for i in os.listdir("C:/Users/ryan/PycharmProjects/ML_Projects_fixed/Red"):
     img = cv2.imread(i)
     print(img)

此循环为所有图像打印 None。这是否意味着它是一个路径问题?

编辑2; 感谢 Geza Kerecsenyi 的回答,它解决了我的问题。我的循环没有找到指定的文件,它只是读取文件名,所以除非它在我 运行 我的脚本所在的相同路径中,否则它无法看到它。

感谢大家的评论

尝试:img = cv2.imread("C:/Users/ryan/PycharmProjects/ML_Projects_fixed/Red/" + i)。这很可能是路径问题,因为 cv2 模块与调用它的 JetBrains 文件夹位于不同的位置 (C:\Users\ryan\AppData\Local\Programs\Python\Python36)。不过,您或许可以在 Pycharm 设置中解决此问题。