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中的多条件排序实现
Jun 07 Python
Python实现的密码强度检测器示例
Aug 23 Python
python判断设备是否联网的方法
Jun 29 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
Django ModelForm操作及验证方式
Mar 30 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
python 进程池pool使用详解
Oct 15 Python
pandas处理csv文件的方法步骤
Oct 16 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
各种快递查询--Api接口
2016/04/26 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
python3.3实现乘法表示例
2014/02/07 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
详解Python中with语句的用法
2015/04/15 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
用python写爬虫简单吗
2020/07/28 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
护理职业生涯规划书
2014/01/24 职场文书
玲玲的画教学反思
2014/02/04 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
综合办公室岗位职责
2015/04/11 职场文书