微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将图像从一个文件夹中分离出来,然后放入另一个文件夹中

如何解决将图像从一个文件夹中分离出来,然后放入另一个文件夹中

我是python的新手,我正尝试从三个文件夹中加载图像,我想根据它们的名称结尾区分它们并放入新文件夹中。 例如,某些图像以1550_R_1、1500_R_2等结束,而某些图像以1500_1、1500_2等结束。 我怎样才能做到这一点? 我能够加载所有图像。

**import cv2
import os
import numpy as np
from shutil import copyfile
import matplotlib.image as mpimg
import glob
def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
      
            img = cv2.imread(os.path.join(folder,filename))
            
            if img is not None:
             images.append(img)
    return images
folders = [
    'C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Pictures/I3te_Reaktion','C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Pictures/4te_Reaktion','C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Pictures/5te_Reaktion',]
for folder in folders:
    images = load_images_from_folder(folder)

all_images = [img for folder in folders for img in load_images_from_folder(folder)]

print(len(all_images))
print(all_images)
i=150
for N in range(i):
  for filename in all_images:
     if any([filename.endswith(x) for x in ['1550_R_N.jpeg','1550_N','.jpeg','.jpg']]):
        cv2.imwrite(dir_name,filename)**

但这会引发错误

 if any([filename.endswith(x) for x in ['1550_R_N.jpeg','.jpg']]):
  File "C:\Users\shiva\PycharmProjects\pythonProject\isabella.py",line 59,in <listcomp>
    if any([filename.endswith(x) for x in ['1550_R_N.jpeg','.jpg']]):
AttributeError: 'numpy.ndarray' object has no attribute 'endswith'

解决方法

我建议使用regular expression来完成您想做的事情。正则表达式是您定义并尝试匹配的模式。所以也许您的代码看起来像这样:

import re

[your existing code]

for filename in all_images:
    if re.match(r'.*_R_N.*',filename):
        print("Filename has '_R_N' in it,do something")
    else:
        print("filename doesn't have '_R_N' in it (so maybe it only has "_N" in it)")

正则表达式函数match查找包含在字符串中的_R_N。如果找不到匹配项,则返回值为none,因此不满足if条件。您可以尝试各种正则表达式模式以满足您的需求。

,

修复错误/异常;更改功能以将文件名与图像保持为元组。

sed 's/[()]//g' file 

然后解压缩循环中的名称以在条件中使用:

def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
       # if any([filename.endswith(x) for x in ['1500_R_1','.jpg','.jpeg']]):
            img = cv2.imread(os.path.join(folder,filename))
            #cv2.imshow('Color image',img)
            if img is not None:
             images.append((filename,img))
    return images
,

基本思想是从3个文件夹中获取图像,并根据其名称将其分离,然后将其放入新文件夹中。任何人都可以给我一个想法如何做到这一点。另外,我试图从用户那里获取所有文件夹的输入,然后读取图像。您还能为此建议些什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。