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 Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python实现Thrift服务端的方法
Apr 20 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
信用卡效验程序
2006/10/09 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
PHP设置进度条的方法
2015/07/08 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
js实现秒表计时器
2019/12/16 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
详解Python中的文本处理
2015/04/11 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
Django内容增加富文本功能的实例
2017/10/17 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python数据分析:关键字提取方式
2020/02/24 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
浙江文明网签名寄语
2014/01/18 职场文书
班组长竞聘书
2014/03/31 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书