python - 操作系统错误:[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)
解决方案
如果将完整路径名传递给 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\*.png
,C:\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)
推荐阅读
- android - 在 AOSP 7.1 中链接预建共享库时未定义的引用
- sparql - 如何按城市过滤结果?
- ios - 在原生 iOS 应用程序中集成响应式 html 网页并使用 Apache Cordova 进行通信
- ios - 我想在不让他们安装应用程序的情况下向用户的电话号码发送图片和消息。我正在使用 firebase 进行存储(swift iOS)
- scala - 除了反射之外,有没有办法在 Scala 中创建泛型类型的实例
- c++ - 在抛出 'std::invalid_argument' what() 实例后调用终止:leetcode 问题中的 stoi 错误
- r - 两个 rmd 编织成功,但是当将上下文合并为一个时,发生错误
- java - 尝试运行 Spring Cloud Kinesis 时出现 Spring Cloud ClassNotFoundException
- php - 使用 AJAX 调用时 POST 变量为空
- python - celery 弦回调 on_error 缺少参数