OpenCV的imwrite无法保存照片,返回false。

5
我有以下代码,代码的功能应该是:
  • 遍历所有文件
  • 收集属于“0”或“1”文件夹中的所有照片
  • 稍微转换这些照片
  • 将它们放入新文件夹中,所有“0”照片都进入一个唯一的文件夹。1同理。
以下是代码:
import cv2
import os
import random as rnd

outdir0='cancerdata\\0'
outdir1='cancerdata\\1'
readdir='sample'
j=0;
for dirs in os.listdir(readdir):
    dpath=os.path.join(readdir,dirs)
    for subdir in os.listdir(dpath): 
        fpath=os.path.join(dpath,subdir)
        for file in os.listdir(fpath):

            rfile=os.path.join(fpath,file)
            image=cv2.imread(rfile,0)
            size=rnd.randint(50,100)
            img=cv2.resize(image,(size,size),interpolation=cv2.INTER_AREA)
            print(img)
            if subdir == '0':
                wfile=os.path.join(outdir0,file)
                cv2.imwrite(os.path.join(outdir0,file),img)
            elif subdir == '1':
                wfile=os.path.join(outdir1,file)
                cv2.imwrite(os.path.join(outdir1,file),img)

它没有报错,但由于某些原因却无法保存任何文件。 无论我尝试通过何种方式保存单个图像

 cv2.imwrite(r'sample\cancerdata\1\8865_idx5_x2101_y851_class1.png',img)

我只得到了FALSE。



在你的情况下,这并不是正确答案,因为我发现即使在os.path.join之后,文件名也不会太长。但是,在我的情况下,如果最终的文件名(绝对路径)太长,我也会得到相同的cv2.imwrite假返回值。 - rajan
4个回答

5
在Python字符串中使用反斜杠(\)可能会带来一些意外。在上述代码中,反斜杠会生成一个八进制值,在Windows文件名中是无效的。有关详细信息,请参见https://docs.python.org/3/reference/lexical_analysis.html#literals
在Windows上,Python运行时非常适用正斜杠(/)。请使用正斜杠。

4
你保存的文件夹可能不存在。
确保这些文件夹存在:
cancerdata\0
cancerdata\1
sample\cancerdata\1

1
这是我的问题,我需要创建存储图像的文件夹。响应为False是有道理的,但应该有更好的方法来捕获错误消息。 - yaach

0

我曾经遇到过完全相同的问题。 我的路径包含了一些希伯来字符,这些字符可能不被该库支持。 我将其改为英文后,图像已经保存成功。 更改前的路径:r"C:\פרויקט\dataset"
更改后的路径:r"C:\project\dataset"


-1

首先将您想要存储图像的目录设置为当前工作目录。然后只需简单地传递图像的名称,您的图像就会被保存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接