文件目录

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的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

python裁剪图片box并保存_python 截取XML中bndbox的坐标中的图像,另存为jpg的实例相关推荐

  1. python裁剪图片box并保存_python实现图像随机裁剪

    实验条件: 从1张图像随机裁剪100张图像 裁剪出图像的大小为 60 x 60 IoU 大于等于 th=0.6 的裁剪框用红色标出,其它裁剪框用蓝色标出 IoU 比对原始区域用绿框标出 实验代码: i ...

  2. Python调整图片大小并保存调整后的图像

    Python调整图片大小并保存调整后的图像 目录 Python调整图片大小并保存调整后的图像 #原始图像

  3. Python裁剪图片(Crop an Image)

    Python裁剪图片(Crop an Image) 目录 Python裁剪图片(Crop an Image) #原始图像 #图像剪裁 #处理后的图像

  4. python下载图片到文件夹_Python下载图片并保存本地的四种方法

    一:使用Python中的urllib类中的urlretrieve()函数,直接从网上下载资源到本地,具体代码: import os,stat import urllib.request img_url ...

  5. python批量读取图片并批量保存_Python实现批量读取图片并存入mongodb数据库的方法示例...

    本文实例讲述了Python实现批量读取图片并存入mongodb数据库的方法.分享给大家供大家参考,具体如下: 我的图片放在E:\image\中,然后使用python将图片读取然后,显示一张,存入取一张 ...

  6. python 裁剪图片

    最近笔者有个东西,需要上传的时候,让用户来裁剪图片,网上基本的做法,就是在本地的浏览器裁剪完毕,把裁剪后的坐标情况告诉服务器,让服务器来裁剪,因为笔者不是用PHP,无法享受GD模块的帮助了,所以利用p ...

  7. python下载图片到文件夹_python 移动图片到另外一个文件夹的实例

    python 移动图片到另外一个文件夹的实例 如下所示: # -*- coding:utf8 -*- import os import shutil import numpy as np import ...

  8. python将图片原比例缩小_Python批量按比例缩小图片脚本分享

    图片太大了,上百张图用photoshop改太慢,就想到用python写个简单的批处理.功能简单就是把原图按比例缩小 复制代码 代码如下: # -*- coding: cp936 -*- import ...

  9. python将图片转为字符画_Python将图片转换为字符画的方法

    最近在学习python,看到网上用python将图片转换成字符画便来学习一下 题目意思是,程序读入一个图片,以txt格式输出图片对应的字符画,如图所示: 以下是python代码: # coding:u ...

最新文章

  1. TensorFlow(7)卷积神经网络实战(1)(可视化)
  2. No loop matching the specified signature and casting was found for ufunc true_divide 解决方案
  3. 为什么牛在天上飞 因为有人在地上吹 谈高德地图说日活过亿
  4. 利物浦大学的对于学生多样性的保护的网站!有什么unbalanced issues 直接找这里就行!
  5. button 样式_实战PyQt5: 111-可以使用QSS样式表的部件
  6. 华为重磅反击,鸿蒙来了!
  7. 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_图解:什么是“图”?
  8. [vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的?
  9. 成功创业者所需的能力
  10. vba 循环读取单元格_利用VBA打开顺序文件,并读取
  11. go 调用c语言,golang之调用C语言代码
  12. CUDA的线程层次结构
  13. OpenCV使用小札记-Cvmat与IplImage的相互转换
  14. ML - 常用数学符号
  15. 喜大普奔,Google 的一小步!
  16. 【JAVA笔记——道】Hadoop设计模式--抽象类
  17. linux下rar下载地址,linux下rar解压(rarlinux下载,安装 ,使用)
  18. 第三篇:知其然,知其所以然-USB音频设备的开发过程
  19. java的测试岗位_JAVA测试岗位职责
  20. UGUI源码解析(二十二)ContentSizeFitter

热门文章

  1. 关于如何通过IEEE Xplore PDF格式检查
  2. 高通SDM845平台Sensor学习——4.SLPI(SAM Sensor)--
  3. WIN32 API:绘图函数
  4. 为了快速响应全球用户请求,汇量科技选择了上云
  5. 区块链侧链应用开发平台Asch节点安装及区块生产教程
  6. 游戏建模|坚持下来的人都是非常优秀的?因为他离不开以下几点
  7. 大厂秘籍:谷歌代码规范开放下载,手把手教你写出好代码
  8. Matrix67的LCD电子公告牌、GB2312-80编码、HZK16字模及其他
  9. cocos2d 简单高仿天天酷跑游戏
  10. 光波导的概念及平面介质光波导中光的传播