在训练时,有时候需要将jpg格式转换为png格式,顺便也要把jpg标注的xml文件转换为png的xml文件。例如,需要把xml文件中的图像后缀名“.jpg”批量去掉,这时候就需要批量修改Xml中的<filename>属性了。

比如:修改之前的文件:




python 更改图像最大像素值大小 python修改照片属性_.net 获取xml里面的值


修改后:


python 更改图像最大像素值大小 python修改照片属性_python 更改图像最大像素值大小_02


import os
import os.path
import xml.dom.minidom
path="E:python_summaryimage_anoAno"
files=os.listdir(path)#返回文件夹中的文件名列表
#print(files)
s=[]
count=0
for xmlFile in files:
    if not os.path.isdir(xmlFile):#os.path.isdir()用于判断对象是否为一个目录
        #如果不是目录,则直接打开
        name1=xmlFile.split('.')[0]
        print(name1)
        dom=xml.dom.minidom.parse(path+''+xmlFile)
        #print(dom)
        root=dom.documentElement
        newfolder=root.getElementsByTagName('folder')
        #print(newfolder)
        newpath = root.getElementsByTagName('path')
        newfilename = root.getElementsByTagName('filename')
        newfilename[0].firstChild.data = name1
        with open(os.path.join(path, xmlFile), 'w') as fh:
            dom.writexml(fh)
            #print('写入name/pose OK!')
        count = count + 1


python 更改图像最大像素值大小 python修改照片属性_.net 获取xml里面的值_03


【图像jpg格式批量转换为png格式技巧】

(1)、首先在你放图片的文件夹里新建一个记事本文件,取名为“图片批量转化”。要注意的一点就是,里面的图片要统一为一种格式。

(2)、如果想将jpg格式批量转化为png格式,那么就在刚才新建的记事本文档里输入“ren *.jpg *.png”。举一反三可知,如果是将png格式转化为jpg,那么就该这样写“ren *.png *.jpg”。这里要强调的一点就是,“ren”与“png”之后要加有一个空格。记事本文档保存后,将后缀名修改为“bat”。

(3)、最后一步就是双击“bat”后缀的这个文件,它会自动弹出一个窗口,不用管它,等几秒后自动消失,然后就发现所有的图片格式都变成我们想要的png格式了。

参考:

不用任何软件,批量转化图片格式-百度经验jingyan.baidu.com

python 更改图像最大像素值大小 python修改照片属性_python 更改图像最大像素值大小_04


【补充】

XML中的一些属性,比如bndbox中的xmin,ymin,xmax,ymax这四个值,在标记时,如果这些值为负数或者小数,要把他们转换为整数或者不能超越图像边界的值,这时候就需要批量修改。

修改时要注意每个Xml中的这四个值有多个对,也即是每幅图像可能有多个目标,从而对应的bndbox也有多个。


# coding=utf-8
import os
import os.path #批量修改Xml文件中的属性值
import xml.dom.minidom
#打开xml文档
path='E:python_summaryXml_Airpalne'
files=os.listdir(path)#得到文件夹下所有文件名称(存到列表)
#print(files)
for xmlFile in files:#遍历文件夹
    if not os.path.isdir(xmlFile):#判断是否是文件夹,不是文件夹才打开
        #将获取的xml文件名送入到dom解析
        #print(xmlFile)
        dom=xml.dom.minidom.parse(os.path.join(path,xmlFile))
        root=dom.documentElement
        #获取标签对
        xmin=root.getElementsByTagName('xmin')
        ymin=root.getElementsByTagName('ymin')
        xmax=root.getElementsByTagName('xmax')
        ymax=root.getElementsByTagName('ymax')
        #修改属性值
        #xmin
        for j in range(len(xmin)):
            xmin[j].firstChild.data=int(float(xmin[j].firstChild.data))
            if (float(xmin[j].firstChild.data)< 0):
                xmin[j].firstChild.data=0
            print(xmin[j].firstChild.data)
        #ymin
        for u in range(len(ymin)):
            ymin[u].firstChild.data=int(float(ymin[u].firstChild.data))
            if (float(ymin[u].firstChild.data)< 0):
                ymin[u].firstChild.data=0
            print(ymin[u].firstChild.data)
        #xmax
        for v in range(len(xmax)):
            xmax[v].firstChild.data=int(float(xmax[v].firstChild.data))
            if (float(xmax[v].firstChild.data)< 0):
                xmax[v].firstChild.data=0
            print(xmax[v].firstChild.data)
        #ymax
        for s in range(len(ymax)):
            ymax[s].firstChild.data=int(float(ymax[s].firstChild.data))
            if (float( ymax[s].firstChild.data)< 0):
                ymax[s].firstChild.data=0
            print( ymax[s].firstChild.data)
        #保存修改到xml文件中
        with open(os.path.join(path,xmlFile),'w') as wn:
            dom.writexml(wn)
            print("修改完成!")