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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
python中requests模块的使用方法
Apr 08 Python
python插入数据到列表的方法
Apr 30 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python实现根据文件格式分类
Oct 31 Python
python 实现目录复制的三种小结
Dec 04 Python
python Tensor和Array对比分析
Jan 08 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
Python Pygame实战之塔防游戏的实现
Mar 17 Python
python中 .npy文件的读写操作实例
Apr 14 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
Dedecms常用函数解析
2008/02/01 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
Python实现获取某天是某个月中的第几周
2015/02/11 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
软件缺陷的分类都有哪些
2014/08/22 面试题
物流专业大学生求职信范文
2013/10/28 职场文书
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技