文件目录
Annotations中是XML文件。
JPEGImages中是对应的JPG文件
XML文件
要截取bndbox坐标中的内容。
python代码
# -*- coding: utf-8 -*- # @Time : 2020/2/8 22:14 # @Author : SanZhi # @File : get_xml.py # @Software: PyCharm import cv2 import numpy as np import xml.dom.minidom import os import argparse def main(): # JPG文件的地址 img_path = 'D:/ser/JPEGImages/' # XML文件的地址 anno_path = 'D:/ser/Annotations/' # 存结果的文件夹 cut_path = 'D:/ser/cut/' # 获取文件夹中的文件 imagelist = os.listdir(img_path) for image in imagelist: image_pre, ext = os.path.splitext(image) img_file = img_path + image img = cv2.imread(img_file) xml_file = anno_path + image_pre + '.xml' DOMTree = xml.dom.minidom.parse(xml_file) collection = DOMTree.documentElement objects = collection.getElementsByTagName("object") for object in objects: print("start") bndbox = object.getElementsByTagName('bndbox')[0] xmin = bndbox.getElementsByTagName('xmin')[0] xmin_data = xmin.childNodes[0].data ymin = bndbox.getElementsByTagName('ymin')[0] ymin_data = ymin.childNodes[0].data xmax = bndbox.getElementsByTagName('xmax')[0] xmax_data = xmax.childNodes[0].data ymax = bndbox.getElementsByTagName('ymax')[0] ymax_data = ymax.childNodes[0].data xmin = int(xmin_data) xmax = int(xmax_data) ymin = int(ymin_data) ymax = int(ymax_data) img_cut = img[ymin:ymax, xmin:xmax, :] cv2.imwrite(cut_path + 'cut_img_{}.jpg'.format(image_pre), img_cut) if __name__ == '__main__': main()
补充知识:python读取XML中bndbox和object name的方法
直接贴代码了,封装为了函数,直接调用即可。其中有几个点需要注意。
1、bndbox下面有4个子对象,因此不能直接使用firstChild来找到内容,需要从该对象里面继续寻找标签为xmin等这样的对象,注意要加[0]才正确,有问题的可以直接调试,然后看变量的结构,根据变量的结构来调用某一对象。
2、将空格' '替换为'_',方便命名。但是使用str.replace(' ', '_')不会直接改变str的内容,返回的字符串是改变后的,因此需要变量保存。
import xml.dom.minidom as xmldom def get_bndboxfromxml(imageNum, xmlfilebasepath): # 读取xml文件 bndbox = [0, 0, 0, 0] xmlfilepath = xmlfilebasepath + "\%06d" % imageNum+'.xml' # print(xmlfilepath) domobj = xmldom.parse(xmlfilepath) elementobj = domobj.documentElement sub_element_obj = elementobj.getElementsByTagName('bndbox') if sub_element_obj is not None: bndbox[0] = int(sub_element_obj[0].getElementsByTagName('xmin')[0].firstChild.data) bndbox[1] = int(sub_element_obj[0].getElementsByTagName('ymin')[0].firstChild.data) bndbox[2] = int(sub_element_obj[0].getElementsByTagName('xmax')[0].firstChild.data) bndbox[3] = int(sub_element_obj[0].getElementsByTagName('ymax')[0].firstChild.data) return bndbox def get_bndboxnamefromxml(imageNum, xmlfilebasepath): bndbox = [0, 0, 0, 0] xmlfilepath = xmlfilebasepath + "\%06d" % imageNum + '.xml' domobj = xmldom.parse(xmlfilepath) elementobj = domobj.documentElement sub_element_obj = elementobj.getElementsByTagName('name') name = sub_element_obj[0].firstChild.data.replace(' ', '_') return name
以上这篇python 截取XML中bndbox的坐标中的图像,另存为jpg的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
我有一个jpg格式的地图图像。我正在尝试为每个像素计算纬度和经度。我有3点坐标也像素行和列。 地图图像 这里有三点: BLK:LATLNG:39.760751,27.840443 UTM_Meters:571990.1817772812,4401541.17886532区/带:35,'S'像素:[210,247]
我已经用Python创建了几个绘图,并试图将它们另存为。png文件或PDF。输入数据后,我将使用以下代码创建: 情节也很精彩。然而,每当我使用 plt.savefigSersic_Voids.png 为了保存,它这样做,文件显示在我的电脑上。对于我使用的每次和文件类型,文档都是空白的,没有绘图、轴或任何东西。 编辑1:我已经在使用要保存的格式,但运气不好。我没有plt。show()函数,每个Jup
我试图计算一种有效的方法,将笛卡尔坐标系中的图像转换为极坐标表示。我知道ImToPolar等一些功能正在实现这一点,它工作得很好,但对于大图像来说需要相当长的时间,尤其是当它们需要来回处理时。 这是我的输入图像: 然后我使用以0为中心的笛卡尔网格和函数生成一个极网格。最后,我使用绘制我的图像。 这是我得到的: 这正是我需要的图像,它与ImToPolar相同,或者更好。 既然MATLAB知道如何计算
我正在使用VEMap API。我有一张地图的左上点和右下点(包围框)的纬度和经度。我要得到中心点。有什么简单的方法可以做到这一点?我在谷歌上搜索也找不到解决办法。 我在想的是,如果我能用上面提到的两点定义地图,那么我就能非常容易地得到中心:
我正在抓取此网页以供个人使用https://asheville.craigslist.org/search/fua并在提取页面上每个项目的缩略图时遇到问题。当我使用“检查”查看html DOM时,我可以查看包含我需要的. jpg的图像标签,但当我使用“查看页面源”时,img标签不会显示。起初我认为这可能是一个异步javascript加载问题,但一个可靠的消息来源告诉我,我应该能够直接用漂亮的汤抓取
我有一个包含坐标的.csv文件,我需要在我做过的地图上使用python绘制它们。有人能帮我吗?