目标检测:XML文件矩形框在图片上的简单可视化

代码如下:
需要改的就是开头的四行
可视化结果只有框,没有类别
用于验证
自己写的,亲测可用

import xml.etree.ElementTree as ET
import os
import cv2

# ******************************************
src_XML_dir = r'annotations'  # xml源路径
src_IMG_dir = r'images'  # IMG原路径
IMG_format = '.jpg'    # IMG格式
out_dir = 'out'  # 输出路径
# ******************************************

if not os.path.exists(out_dir):
    os.makedirs(out_dir)
xml_file = os.listdir(src_XML_dir)  # 只返回文件名称,带后缀

for each_XML in xml_file:  # 遍历所有xml文件
    # 读入IMG
    xml_FirstName = os.path.splitext(each_XML)[0]
    img_save_file = os.path.join(out_dir, xml_FirstName+IMG_format)
    img_src_path = os.path.join(src_IMG_dir, xml_FirstName+IMG_format)
    img = cv2.imread(img_src_path)
    # 解析XML
    each_XML_fullPath = src_XML_dir + '/' + each_XML  # 每个xml文件的完整路径
    tree = ET.parse(each_XML_fullPath)  # ET.parse()内要为完整相对路径
    root = tree.getroot()  # 类型为element

    # 画框
    for obj in root.findall('object'):
        if obj.find('bndbox'):
            bndbox = obj.find('bndbox')
            xmin = int(bndbox.find('xmin').text)
            xmax = int(bndbox.find('xmax').text)
            ymin = int(bndbox.find('ymin').text)
            ymax = int(bndbox.find('ymax').text)

            cv2.rectangle(img=img,
                          pt1=(xmin,ymin),
                          pt2=(xmax,ymax),
                          color=(255,0,0),
                          thickness=2)

    cv2.imwrite(filename=img_save_file, img=img)
    print('保存结果{}'.format(xml_FirstName))
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,您可以使用Python中的OpenCV库来实现人脸检测。以下是一个简单的示例代码,可以实现您所需的功能: ```python import cv2 from tkinter import * from PIL import Image, ImageTk # 创建人脸检测器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 创建窗口 window = Tk() window.title("人脸检测程序") # 创建输入框 input_frame = Frame(window) input_frame.pack(side=TOP) input_label = Label(input_frame, text="输入图片路径:") input_label.pack(side=LEFT) input_entry = Entry(input_frame, width=50) input_entry.pack(side=LEFT) # 创建显示框 display_frame = Frame(window) display_frame.pack(side=BOTTOM) display_label = Label(display_frame) display_label.pack() # 定义函数来处理图片并显示 def detect_faces(): # 读取输入图片 img_path = input_entry.get() img = cv2.imread(img_path) # 检测人脸 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 在图像上绘制矩形框来标记人脸 for (x,y,w,h) in faces: cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2) # 将图像转换为PIL图像并显示 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = Image.fromarray(img) img = ImageTk.PhotoImage(img) display_label.configure(image=img) display_label.image = img # 创建按钮 button_frame = Frame(window) button_frame.pack(side=BOTTOM) detect_button = Button(button_frame, text="检测人脸", command=detect_faces) detect_button.pack() # 运行窗口 window.mainloop() ``` 在这个示例代码中,我们使用了OpenCV库来进行人脸检测,并使用Tkinter库来创建可视化界面。我们创建了一个输入框来让用户输入图片路径,一个显示框来显示处理后的图片,并创建了一个按钮来触发人脸检测。当用户点击检测按钮时,程序会读取输入的图片,对其进行人脸检测,并在图像上绘制矩形框来标记人脸,最后将处理后的图像显示在显示框中。 注意,在运行代码之前,您需要先下载并安装OpenCV库,并下载haarcascade_frontalface_default.xml文件,该文件包含了人脸检测器的训练数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值