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下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
python 拼接文件路径的方法
Oct 23 Python
Python基于mysql实现学生管理系统
Feb 21 Python
python调用外部程序的实操步骤
Mar 04 Python
代码实例讲解python3的编码问题
Jul 08 Python
Python Django基础二之URL路由系统
Jul 18 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
python能做哪方面的工作
Jun 15 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
实操Python爬取觅知网素材图片示例
Nov 27 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的memcached客户端memcached
2011/06/14 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
快速了解Python中的装饰器
2018/01/11 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
python 6种方法实现单例模式
2020/12/15 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
介绍一下如何优化MySql
2016/12/20 面试题
2015年检验科工作总结
2015/04/27 职场文书
班主任培训研修日志
2015/11/13 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server
Golang 结构体数据集合
2022/04/22 Golang