图像处理 图像处理、xml读取,文件重命名

该博客主要介绍了图像处理的几个关键步骤,包括使用Python的PIL库进行等比例缩放图片、图像旋转、转RGB颜色空间,以及读取XML文件和文件重命名的操作。首先,通过遍历文件夹并应用等比例缩放方法,将图像调整至指定尺寸。接着,实现了图像的90度旋转,同时转换为RGB色彩空间。此外,博客还展示了如何读取XML文件中的对象信息,包括对象名称及其边界框坐标。最后,演示了如何批量重命名文件。
摘要由CSDN通过智能技术生成

1、等比例缩放图片

from PIL import Image
import os

def image(path,save_path):
    for parent, dirnames, filenames in os.walk(path):
        count=0
        for filename in filenames:
            iamge_path = os.path.join(parent, filename)
            image_open = Image.open(iamge_path)
            # 原始图像的宽度
            pre_w = int(image_open.size[0])
            pre_h = int(image_open.size[1])
            print("原先像素宽为%d,高为%d"%(pre_w,pre_h))

            # 长度固定,按照等比进行缩放
            now_w = 1200
            now_h = int((now_w * pre_h)/pre_w)

            # 长与宽固定
            # now_w = 1219
            # now_h = 789

            new_image = image_open.resize((now_w, now_h), Image.ANTIALIAS)

            save_path_=os.path.join(save_path,filename)
            new_image.save(save_path_)
            count+=1
            print("总共%d张图像,目前第%d张处理完毕"%(len(filenames),count))


if __name__ == '__main__':
    path=r"F:\image\8\dianzi\未标记"
    save_path=r"F:\image\8\dianzi\郭庆汝标注11500~14578"
    image(path,save_path)

2、图像旋转角度、转RGB

from PIL import Image
import os


def change_agle(path):
    for parent,dirnames,filenames in os.walk(path):
        for filename in filenames:
            image_path=os.path.join(parent,filename)
            image_open = Image.open(image_path).convert("RGB")
            w,h = image_open.size
            print(filename,"宽度为:",w,"高度为:",h)
            if w<h:
                image_transpose = image_open.transpose(Image.ROTATE_90)
                image_transpose.save(image_path)
                print("%s被翻转了-----"%(filename))
            else:
                pass

def rename(path,save_path_):
    exts = ['jpg', 'png', 'jpeg', 'JPG', 'PNG']
    count=0
    for parent,dirnames,filenames in os.walk(path):
        for filename in filenames:
            for ext in exts:
                if filename.endswith(ext):
                    image_path = os.path.join(parent, filename)
                    image = Image.open(image_path).convert("RGB")
                    new_name="a"+str(count).zfill(9)+".jpg"
                    save_path=os.path.join(save_path_,new_name)
                    image.save(save_path)
                    print("图片总量为----%d张,当前处理----第%d张,文件名为------%s"%(len(filenames),count,new_name))
                    count+=1
                else:
                    continue


if __name__ == '__main__':
    path=r"F:\image\8\pupiao\普票_rename(未缩放) - 副本"
    save_path=r"F:\image\8\pupiao\temp"
    change_agle(path)
    # rename(path,save_path)

3、读取xml文件

"""
python 读取xml文件内容并完成修改
"""

import os
import xml.etree.ElementTree as ET
from xml.dom.minidom import parse

# 方式一读取xml文件
def byfinall(inputpath):
    listdir = os.listdir(inputpath)
    for file in listdir:
        if file.endswith("xml"):
            file = os.path.join(inputpath, file)        # 拼接完整路径
            tree = ET.parse(file)                       # 加载xml文件,获取xml树对象
            root = tree.getroot()                       # 获取根节点
            tag_name = root.tag                         # .tag 得到标签的名称
            print("输出根节点的名称:",tag_name)

            for object in root.findall("object"):        # 相关信息在object中,所以需要先找到object
                for name_object in object.findall("name"):  # 获取到name标签的对象
                    print("name标签的文本内容:",name_object.text)


            print("**"*10)

            for object in root.findall("object"):
                name_obj = object.findall("name")       # 返回的是一个list
                name_text = name_obj[0].text            # 得到name文本
                print("%s类别的坐标为:..."%(name_text))
                # print("%s类的位置坐标为。。。。" % (name_objs[0].text))
                for bndbox_object in object.findall("bndbox"):
                    children_node  = bndbox_object.getchildren()        # 得到标签对象的孩子(返回的是一个列表)
                    xmin_text = children_node[0].text
                    ymin_text = children_node[1].text
                    xmax_text = children_node[2].text
                    ymax_text = children_node[3].text
                    print("xmin:",xmin_text,"ymin:",ymin_text,"xmax:",xmax_text,"ymax:",ymax_text)


 # 方式二读取xml文件
def loop_read_xml(file_path):
    domTree = parse(file_path)
    # 得到文档的根元素
    rootNode = domTree.documentElement
    print(rootNode.nodeName)

    # 所有的object节点
    objects = rootNode.getElementsByTagName("object")
    print("*****所有的坐标信息*****")

    for object in objects:
        bndbox_objs= object.getElementsByTagName("bndbox")
        for bndbox_obj in bndbox_objs:
            xmin_ = bndbox_obj.getElementsByTagName("xmin")[0]
            ymin_ = bndbox_obj.getElementsByTagName("ymin")[0]
            xmax_ = bndbox_obj.getElementsByTagName("xmax")[0]
            ymax_ = bndbox_obj.getElementsByTagName("ymax")[0]


            print("xmin_:",xmin_.nodeName)
            # 注意:xmin_.firstChild.nodeName  得到是是其#txt
            print("xmin_:",xmin_.firstChild.data,"ymin_:",ymin_.firstChild.data,"xmax_:",xmax_.firstChild.data,"ymax_:",ymax_.firstChild.data)




if __name__ == '__main__':

    # 方式一读取xml文件
    inputpath=r"D:\project\CHINESE-OCR\data"
    byfinall(inputpath)

    # 方式二读取xml文件
    # file_path=r"E:\pycharm_pro\idcard_project\gr_utils\about_xml\xml_file\I01T02_000001.xml"
    # loop_read_xml(file_path)

4、文件重命名

import os
dir=r"F:\image\8\pupiao"
rename_dir=r"F:\image\普票_rename"

listdir = os.listdir(dir)
count=0
for name in listdir:
    image_path = os.path.join(dir, name)
    name="puzhuan_"+str(count).zfill(9)+".jpg"
    new_name = os.path.join(rename_dir, name)
    count+=1
    os.rename(image_path,new_name)
    print(name,"处理完毕")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值