首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一批已处理的图像保存到特定文件夹

如何将一批已处理的图像保存到特定文件夹
EN

Stack Overflow用户
提问于 2022-05-09 01:57:23
回答 2查看 558关注 0票数 0

我正在尝试处理一个原始数据集自选文件夹,并将输出图像保存到目标文件夹中。

例如:

video_0001中的原始数据集应该以与video_0001相同的文件夹名保存在目标目录中。

我尝试了以下代码,但由于数据集包含200多个文件夹

以下是我想出的

代码语言:javascript
运行
复制
directory = "C:\\Users\\dataset\\distdir"
save_directory1 = "C:\\Users\\Desktop\\dataset\\distdir\\save_img\\Folder1"
save_directory2 = "C:\\Users\\Desktop\\dataset\\distdir\\save_img\\Folder2"

height = 512
width = 512


for root, dirs, files in os.walk(directory):
      for folder_name in dirs:
         cv2.imwrite(os.path.join(save_directory1, file), img)
         cv2.imwrite(os.path.join(save_directory2, file), img)  
      for file in files: 
         img = cv2.imread(os.path.join(root,file))
         print(img)
         img = cv2.resize(img, (height, width))
         img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
         img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)
         print(img.shape)  

但是输出结果是,在文件夹1和文件夹2中只有最后一个图像,并且这个解决方案是不可行的,因为我有超过200个文件夹。

如有任何想法,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2022-05-09 02:28:44

您需要将这两个for循环组合起来。否则,您将一次又一次地重写变量img和文件,并且只保存最后处理的img。

尝试:

代码语言:javascript
运行
复制
directory = "C:\\Users\\dataset\\distdir"

for root, dirs, files in os.walk(directory):
    for file in files:
        img = cv2.imread(os.path.join(root, file))
        img = cv2.resize(img, (height, width))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)
        folder = os.path.splitext(file)[0]
        end_of_path = os.path.join(folder, file)
        cv2.imwrite(os.path.join(directory, end_of_path), img)
票数 0
EN

Stack Overflow用户

发布于 2022-05-09 02:44:27

您可以首先定义预处理逻辑。

  1. 遍历原始文件夹以获取文件夹名
  2. 创建一个目标文件夹基于原始文件夹
  3. 循环该原始文件夹中的所有文件
  4. 执行图像预处理步骤
  5. 将图像保存到创建的目标文件夹H 210G 211

例如,这是原始文件夹的树目录。

代码语言:javascript
运行
复制
-dataset
- -folder_0001
- - -image_01.jpeg
- - -image_02.jpeg
- -folder_0002
- - -image_01.jpeg
- - -image_02.jpeg
...
- -folder_0200
- - -image_01.jpeg
- - -image_02.jpeg
代码语言:javascript
运行
复制
import os
import cv2

input_dir = 'dataset'
output_dir = 'output'

height = 512
width = 512

for root, dirs, files in os.walk(input_dir):
    for file in files:
        # Create output directory
        output_dir_path = os.path.join(output_dir, os.path.split(os.path.dirname(os.path.join(root, file)))[-1])
        if not os.path.exists(output_dir_path):
            os.makedirs(output_dir_path)

        # Do preprocessing image
        img = cv2.imread(os.path.join(root, file))
        img = cv2.resize(img, (height, width))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)

        # Save it to the output directory
        cv2.imwrite(os.path.join(output_dir_path, file), img)

使用此解决方案,您可以处理200个子文件夹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72166298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档