Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调整文件夹中多个图像的大小,将其转换为灰度并保存到另一个文件夹中?_Python_Opencv_Image Resizing - Fatal编程技术网

Python 如何调整文件夹中多个图像的大小,将其转换为灰度并保存到另一个文件夹中?

Python 如何调整文件夹中多个图像的大小,将其转换为灰度并保存到另一个文件夹中?,python,opencv,image-resizing,Python,Opencv,Image Resizing,我已经用Python编写了一些代码,用于从文件夹中调整图像大小并将其转换为灰度,并希望将它们保存在另一个文件夹中。当我编译代码时,它不会显示任何输出,也不会给出任何错误。我正在分享我到目前为止所写的全部代码,以便找到我的错误。这是我的第一个问题 从PIL导入图像#加载图像 从IPython.display导入显示#以显示图像 进口cv2 导入操作系统 导入glob 将numpy作为np导入 img_path=r“C:\Users\usama\Documents\FYP Data\FYP Proj

我已经用Python编写了一些代码,用于从文件夹中调整图像大小并将其转换为灰度,并希望将它们保存在另一个文件夹中。当我编译代码时,它不会显示任何输出,也不会给出任何错误。我正在分享我到目前为止所写的全部代码,以便找到我的错误。这是我的第一个问题

从PIL导入图像#加载图像
从IPython.display导入显示#以显示图像
进口cv2
导入操作系统
导入glob
将numpy作为np导入
img_path=r“C:\Users\usama\Documents\FYP Data\FYP Project Data\hamza\h1.png”
im=Image.open(img\u路径)
打印({}.format(im.format))
打印('Size:{}'。格式(im.Size))
打印('image mode:{}'。格式(im.mode))
im.show()
img_列表=[]
调整大小的_列表=[]
对于glob.glob(r'C:\Users\usama\Documents\FYP Data\FYP Project Data\hamza\*.png)中的文件名:
打印(文件名)
img=Image.open(文件名)
img_list.append(img)
img_list=img_list[:2000]
对于已调整大小的_列表中的图像:
如果图像不在已调整大小的列表中:
调整大小的\u列表。追加(img)
调整大小的列表=(调整大小的列表[:2000])
img=image.resize((500500))
rl=cv2.imread('resized_list')
gray\u image=cv2.CVT颜色(rl,cv2.COLOR\u BGR2GRAY)
cv2.imwrite('调整大小的图像*.png',灰度图像)
尝试以下操作:

import cv2
import glob

for filename in glob.glob(r'your\path\*.png'):
    print(filename)
    img=cv2.imread(filename) 
    rl=cv2.resize(img, (500,500))
    gray_image = cv2.cvtColor(rl, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(f'{filename}.resized.png', gray_image)


没有输出意味着它也不打印
filename
s?如果是这样的话,这条路可能是错的。此外,第二个循环不是很清楚:您正在循环调整大小的_列表(空)元素,并检查它们是否不在其中。在内存中不必要地保留数千个图像的内容列表是一个非常糟糕的主意。。。你只是在你的计算机上放置了不合理的负载。一定要得到一个文件名列表,然后一次读取、转换、写入一个文件名,或者一次多处理4个文件名,但不要一次加载4000个文件名。另外,避免混合使用OpenCV和PIL,这会让您感到困惑。您也可以在一行中完成此操作,而无需使用ImageMagick编写任何代码<代码>mkdir输出;magick mogrify-路径输出-颜色空间灰色-调整大小500x500\!*。png问题询问如何将结果保存到另一个文件夹。我看你没有这样做是的,你可以选择你喜欢的文件夹:
cv2.imwrite(f'folder\\you\\like\{os.path.basename(filename)}',gray\u image)
谢谢你的帮助。我已经试过上面的代码。效果很好。但是当我再次运行代码时,它会再次保存整个图像并进行复制。如何删除这些重复项,我使用了以下代码:
cv2.imwrite(f'folder\\you\\like\\{os.path.basename(filename)}',gray\u image)
用于在转换后保存图像,但它不起作用@DPD@UsamaAli之所以存在副本,是因为脚本会打开文件夹中的所有图像,如果将转换后的图像保存在同一文件夹中,也会打开它们。哪个错误给出了第二个版本?也许Windows path(使用Linux我不太了解)有一些问题:你可以尝试使用
os.path.join
function
cv2.imwrite(os.path.join(你的目录,os.path.basename(filename)),gray\u image)
谢谢…@DPD-但是我让你用同样的代码将文件保存在不同的文件夹中,但它不起作用。以下是我的代码
import glob import cv2 dpath=r'C:\Users\usama\Documents\FYP Data\FYP Project Data\grayscale images*.png'(r'C:\Users\usama\Documents\FYP Data\FYP Project Data\hamza\*.png'):print(filename)img=cv2.imread(filename)rl=cv2.resize(img,(40,50))gray\u image=cv2.cvtColor(rl,cv2.COLOR\u bgr2 gray)cv2.imwrite(os.path.join(dpath,filename),gray\u image)
…@DPD-