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

发布于 2025-01-27 02:55:43 字数 997 浏览 5 评论 0原文

我正在尝试处理RAW数据集Sufolder,并将输出图像保存到目标文件夹中。

因此:例如:

Video_0001中的RAW数据集应保存在目标目录中,并使用与Video_0001相同的文件夹名称保存,

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

因此我可以提出的内容

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多个文件夹。

任何想法都将不胜感激

I am trying to process a raw dataset sufolder and save the output images to a destination folder.

So for example:

Raw dataset in video_0001 should be saved in destination directory with the same folder name as video_0001

I tried the following code but since the dataset contain over 200 folders

here's what I was able to come up with

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)  

But the output is that in folder 1 and folder 2 has the last image only and this solution is not feasible as I have over 200 folders.

Any thoughts would be appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心舞飞扬 2025-02-03 02:55:43

您需要将两个循环组合起来。否则,您将覆盖变量IMG并一次又一次地文件,并且只能保存最后处理的IMG。

尝试:

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)

You need to combine the two for loops. Otherwise, you'll overwrite the variables img and file again and again and will only save the last processed img.

Try:

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)
倦话 2025-02-03 02:55:43

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

  1. 浏览原始文件夹以获取文件夹名称
  2. 创建一个基于原始文件夹循环的目标文件夹,
  3. 该文件夹中的所有文件启动文件夹
  4. 执行图像预处理步骤
  5. 将图像保存到该创建的目标文件夹

中,例如,这是您来源的树目录 使用此解决方案的文件夹

-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
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个子文件夹

You can define your preprocess logic first.

  1. Walk through the origin folder to get the folder name
  2. Create a destination folder based on the origin folder
  3. Loop all files inside that origin folder
  4. Do the image preprocess steps
  5. Save the image to that created destination folder

For example, this is the tree directory of your origin folder

-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
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)

With this solution you able to handle 200 subfolders

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文