首页 > 解决方案 > 操作系统错误:[WinError 123] 文件名、目录名或卷标语法不正确

问题描述

我正在尝试将图像从一个文件夹转换为灰度后保存到另一个文件夹。当我运行我的代码时,它会一直将文件保存在同一个文件夹中并复制所有图像。这是我的代码,请指导我的问题所在...

import glob
import cv2
import os
spath=r"C:\Users\usama\Documents\FYP-Data\FYP Project Data\hamza\*.png"
dpath=r"C:\Users\usama\Documents\FYP-Data\FYP Project Data\grayscale images\*.png"
files = os.listdir(spath)
for filename in glob.glob(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_image = cv2.cvtColor(rl, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(os.path.join(dpath,filename), gray_image)

标签: pythonopencv

解决方案


如果将完整路径名传递给 glob.glob(),那么它将返回结果文件的完整路径,而不仅仅是文件名。

这意味着在您的代码中的这个循环中:

for filename in glob.glob(r'C:\Users\usama\Documents\FYP-Data\FYP Project Data\hamza\*.png'):

文件名是完整路径,例如C:\Users\usama\Documents\FYP-Data\FYP Project Data\hamza\myfile1.png.

然后,稍后在您调用的循环中cv2.imwrite(os.path.join(dpath,filename), gray_image),您尝试将 and 连接在一起C:\Users\usama\Documents\FYP-Data\FYP Project Data\grayscale images\*.pngC:\Users\usama\Documents\FYP-Data\FYP Project Data\hamza\myfile1.png这就是您的错误的原因。

glob()获取所需文件的完整路径很方便,但是您必须将文件名与目录分开。

尝试使用listdir()而不是glob()

import glob
import cv2
import os
sdir=r"C:\Users\usama\Documents\FYP-Data\FYP Project Data\hamza"
ddir=r"C:\Users\usama\Documents\FYP-Data\FYP Project Data\grayscale images"
for filename in os.listdir(sdir):
    if not filename.lower().endswith(".png"):
        continue
    print(filename)
    img=cv2.imread(os.path.join(sdir, filename))
    rl=cv2.resize(img, (40,50))
    gray_image = cv2.cvtColor(rl, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(os.path.join(ddir,filename), gray_image)

推荐阅读