python目标检测给图画框,bbox画到图上并保存案例


Posted in Python onMarch 10, 2020

我就废话不多说了,还是直接上代码吧!

import os
import xml.dom.minidom
import cv2 as cv
 
ImgPath = 'C:/Users/49691/Desktop/gangjin/gangjin_test/JPEGImages/'
AnnoPath = 'C:/Users/49691/Desktop/gangjin/gangjin_test/Annotations/' #xml文件地址
save_path = ''
def draw_anchor(ImgPath,AnnoPath,save_path):
  imagelist = os.listdir(ImgPath)
  for image in imagelist:
 
    image_pre, ext = os.path.splitext(image)
    imgfile = ImgPath + image
    xmlfile = AnnoPath + image_pre + '.xml'
    # print(image)
    # 打开xml文档
    DOMTree = xml.dom.minidom.parse(xmlfile)
    # 得到文档元素对象
    collection = DOMTree.documentElement
    # 读取图片
    img = cv.imread(imgfile)
 
    filenamelist = collection.getElementsByTagName("filename")
    filename = filenamelist[0].childNodes[0].data
    print(filename)
    # 得到标签名为object的信息
    objectlist = collection.getElementsByTagName("object")
 
    for objects in objectlist:
      # 每个object中得到子标签名为name的信息
      namelist = objects.getElementsByTagName('name')
      # 通过此语句得到具体的某个name的值
      objectname = namelist[0].childNodes[0].data
 
      bndbox = objects.getElementsByTagName('bndbox')
      # print(bndbox)
      for box in bndbox:
        x1_list = box.getElementsByTagName('xmin')
        x1 = int(x1_list[0].childNodes[0].data)
        y1_list = box.getElementsByTagName('ymin')
        y1 = int(y1_list[0].childNodes[0].data)
        x2_list = box.getElementsByTagName('xmax')  #注意坐标,看是否需要转换
        x2 = int(x2_list[0].childNodes[0].data)
        y2_list = box.getElementsByTagName('ymax')
        y2 = int(y2_list[0].childNodes[0].data)
        cv.rectangle(img, (x1, y1), (x2, y2), (255, 255, 255), thickness=2)
        cv.putText(img, objectname, (x1, y1), cv.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0),
              thickness=2)
        # cv.imshow('head', img)
        cv.imwrite(save_path+'/'+filename, img)  #save picture

补充知识:深度学习python之用Faster-rcnn 检测结果(txt文件) 在原图画出box

使用Faster-rcnn 的test_net.py 检测网络的mAP等精度会生成一个检测结果(txt文件),格式如下:

000004 0.972 302.8 94.5 512.0 150.0
000004 0.950 348.1 166.1 512.0 242.9
000004 0.875 1.0 25.7 292.6 126.3
000004 0.730 1.0 138.5 488.3 230.0
000004 0.699 1.0 120.9 145.5 139.9
000004 0.592 54.4 227.4 431.9 343.4
000004 0.588 1.0 159.8 18.8 231.6
000004 0.126 1.0 247.1 342.3 270.0
000004 0.120 1.0 225.4 185.7 309.3

每行分别为 名称 检测概率 xmin ymin xmax ymax

问题在于每一行只显示一个box数据,每幅图像可能包括多个box,需要判断提取的多行数据是不是属于同一图片

下面使用python提取这些数据,在原图上画出box并且保存起来

import os
import os.path
import numpy as np
import xml.etree.ElementTree as xmlET
from PIL import Image, ImageDraw
import cPickle as pickle 

txt_name = 'comp4_8a226fd7-753d-40fc-8013-f68d2a465579_det_test_ship.txt'
file_path_img = '/home/JPEGImages'
save_file_path = '/home/detect_results'


source_file = open(txt_name)

img_names = []
for line in source_file:
  staff = line.split()
  img_name = staff[0]
  img_names.append(img_name)

name_dict = {}
for i in img_names:
  if img_names.count(i)>0:
    name_dict[i] = img_names.count(i) 

source_file.close()

source_file = open(txt_name)
for idx in name_dict:
  img = Image.open(os.path.join(file_path_img, idx + '.jpg')) 
  draw = ImageDraw.Draw(img)
  for i in xrange(name_dict[idx]):
    line = source_file.readline()
    staff = line.split()
    score = staff[1]
    box = staff[2:6]
    draw.rectangle([int(np.round(float(box[0]))), int(np.round(float(box[1]))), 
          int(np.round(float(box[2]))), int(np.round(float(box[3])))], outline=(255, 0, 0))
  img.save(os.path.join(save_file_path, idx + '.jpg')) 

source_file.close()

运行完即可在保存文件夹中得到效果图。

以上这篇python目标检测给图画框,bbox画到图上并保存案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python程序员开发中常犯的10个错误
Jul 07 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python笔记:mysql、redis操作方法
Jun 28 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
值得收藏的10道python 面试题
Apr 15 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
什么是python的自省
Jun 21 Python
Django-silk性能测试工具安装及使用解析
Nov 28 Python
python opencv 检测移动物体并截图保存实例
Mar 10 #Python
Python标准库json模块和pickle模块使用详解
Mar 10 #Python
Python xlrd excel文件操作代码实例
Mar 10 #Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 #Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 #Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 #Python
Python读取VOC中的xml目标框实例
Mar 10 #Python
You might like
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
PHP实现百度人脸识别
2019/05/06 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
详解Python发送邮件实例
2016/01/10 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
质检的岗位职责
2013/11/17 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
创业计划书之酒店
2019/08/30 职场文书