1 功能

  • 使用 opencv 对图像进行矩形框标注
  • 因为在使用 labelmg 的过程中感觉不太方便,主要是我所使用的图像长宽比差别大,所以在 labelImg 中标记起来很费劲,而 opencv 可以自由缩放图像,更加方便一些

2 使用方法

2.1 标记

  • 在命令行中运行label_main.py程序后,用选框拖动一个矩形框
  • 会出现一个确认框,如果标注正确,点击正确,那么该标记框就会加入到列表中保存;如果点击错误,那么该标记框不会保存;如果该图片标记完成,点击结束,进行下一张图片的标记(请不要直接关闭图像,而是应该点击结束进行下一张图片的标记)
  • 点击正确后,之前的蓝色矩形框会变成红色
  • 可以自由缩放图像比例进行标记
  • 标记完毕后,每张图片的标记都会生成一个 csv 文件
  • 运行日志
C:\Users>python label_main.py
--当前标记的图片: 0
已经增加一处标记,请继续框选,标记框数量: 1
已经增加一处标记,请继续框选,标记框数量: 2
已经增加一处标记,请继续框选,标记框数量: 3
已经增加一处标记,请继续框选,标记框数量: 4
已经增加一处标记,请继续框选,标记框数量: 5
--结束当前图片标记----当前标记的图片: 1
已经增加一处标记,请继续框选,标记框数量: 1
--结束当前图片标记--

2.2 读取标记框并可视化

  • 运行read_label.py文件,可视化如图所示

2.3 注意

  • 该程序需最好在命令行运行,在 spyder 和 ipython 中可能会出错
  • 注意结束当前标记图片在弹出的确认框中点击结束,而不是直接关掉图片

3 程序

  • github 链接:链接
  • label_main.py
"""
Discription: python + opencv 对图片进行标记
Notes:该程序需最好在命令行运行,在 spyder 和 ipython 中可能会出错注意结束当前标记图片在弹出的确认框中点击结束,而不是直接关掉图片
"""
import os
import cv2
import tkinter as tk
import numpy as npglobal point1, point2
global ensure
global point_listpoint_list = []def createWinSure():""" 创建一个确认框"""global ensurewin=tk.Tk()label=tk.Label(win,text="确认图像标注正确",bg="white",fg="black")label.pack()buttony=tk.Button(win,text="正确",command=lambda:confirm(1,win)) #收到消息执行这个函数buttony.pack() # 加载到窗体buttonn=tk.Button(win,text="错误",command=lambda:confirm(0,win)) #收到消息执行这个函数buttonn.pack() # 加载到窗体buttonn=tk.Button(win,text="结束",command=lambda:confirm(2,win)) #收到消息执行这个函数buttonn.pack() # 加载到窗体win.mainloop()def confirm(flag,win):""" 点击确认框后,将结果保存到全局变量 ensure 中"""global ensureensure = flagwin.destroy()def on_mouse(event, x, y, flags, param):""" 鼠标响应,每次确认完一次都会重新绘制图像Notes:矩形框颜色(B, G, R)"""global point1,point2global point_listglobal ensureglobal pressureimg = param[0]index = param[1]box_length = 2 # 矩形框宽度img2 = img.copy() # 每次鼠标响应都会重新绘制if event == cv2.EVENT_LBUTTONDOWN: #左键点击point1 = (x,y)cv2.circle(img2, point1, 10, (0,255,0), box_length) # 单击时绘制 绿色圆形框 示意cv2.imshow('image', img2)elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): #按住左键拖曳cv2.rectangle(img2, point1, (x,y), (255,0,0), box_length) # 绘制 蓝色矩形框cv2.imshow('image', img2)elif event == cv2.EVENT_LBUTTONUP: #左键释放point2 = (x,y)cv2.rectangle(img2, point1, point2, (0,0,255), box_length) # 绘制 红色矩形框createWinSure() # 创建一个确认框if ensure == 0: # 框选错误,重新框选print('未标记,请在图片上重新框选!')elif ensure == 1: # 框选正确,继续point_list.append([point1[0], point1[1], point2[0], point2[1]])print('已经增加一处标记,请继续框选,标记框数量:', len(point_list))img2 = cv2.rectangle(img2, point1, point2, (0,0,255), box_length) # 绘制 蓝色矩形框cv2.imshow('image', img2)else: # 结束print("--结束当前图片标记--\n")np.savetxt(str(index) + ".csv", point_list, delimiter=",", fmt='%d')point_list = [] # 将列表清零cv2.imshow('image', img2)cv2.destroyAllWindows()def main():for root, dirs, files in os.walk('./data/'): for i in range(0,len(files)):print("--当前标记的图片:", i)img = cv2.imread('./data/'+files[i])cv2.namedWindow('image', 0)cv2.setMouseCallback('image', on_mouse, [img,i])cv2.imshow('image', img)cv2.waitKey(0)if __name__ == '__main__':main()
  • read_label.py
# -*- coding: utf-8 -*-
"""
Discription: 读取 csv 格式的标签信息,并绘制矩形框显示
"""
import cv2
import numpy as npdef cv_rect(data_r, i_xmin, i_xmax, i_ymin, i_ymax):""" 根据标签绘制矩形框Args:data_r: others: 起点终点坐标,必须为整型Returns:data_rect:绘制矩形框后数据,矩形框位置的数据值为 0"""gx_start, gx_end = i_xmin, i_xmaxgy_start, gy_end = i_ymin, i_ymaxdata_rect = data_r.copy()cv2.rectangle(data_rect, (gx_start, gy_start), (gx_end, gy_end), (0,0,255), 2)return data_rectdef main():index = 0src = cv2.imread("./" + str(index) + ".jpeg")src_rect = src.copy()label_list = np.loadtxt("./" + str(index) + ".csv", delimiter=",", dtype='int')for label in label_list:i_xmin, i_ymin, i_xmax, i_ymax = label[0], label[1], label[2], label[3]src_rect = cv_rect(src_rect, i_xmin, i_xmax, i_ymin, i_ymax)cv2.namedWindow('img', 0)cv2.imshow('img', src_rect)if __name__ == '__main__':main()

参考链接

  • 参考:机器学习 人工标注样本工具Python+OpenCV

图像标注工具python+opencv相关推荐

  1. 资源 | 深度学习图像标注工具汇总

    作者 | chaibubble 来源 | CSDN 网站 对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限.世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务.但是数据 ...

  2. 深度学习(目标检测。图像分割等)图像标注工具汇总

    深度学习(目标检测.图像分割等)图像标注工具汇总 2018年05月31日 09:21:54 努力努力再努力tq 阅读数:3581 对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上 ...

  3. 图像标注工具labelimg的安装和使用教程

    图像标注工具labelimg的安装和使用教程 一.安装labelimg (1)首先通过Win+R快捷打开windows的"运行"对话框,在对话框中输入cmd进行终端界面. (2)在 ...

  4. 深度学习图像标注工具汇总

    深度学习图像标注工具汇总 原文地址: https://blog.csdn.net/chaipp0607/article/details/79036312 对于监督学习算法而言,数据决定了任务的上限,而 ...

  5. 深度学习图像标注工具labelme

    来源:极客Merry 前言 在深度学习中若是没有带标注的数据,这可能会阻碍研究的进展,所以深度学习第一步就是制作数据集,手动去标注一些数据.LabelMe就是这样一个在线的图像数据标注工具: Labe ...

  6. 计算机视觉中的图像标注工具总结

    本文来自公众号CV技术指南资源分享系列 创建高质量的数据集是任何机器学习项目的关键部分.在实践中,这通常比实际训练和超参数优化花费的时间更长.因此,选择合适的标注工具至关重要.在这里,我们总结了一些用 ...

  7. CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介、安装、使用方法详细攻略

    CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介.安装.使用方法详细攻略 目录 LabelImg的简介 常见的图片标注工具 LabelImg trainingImageLa ...

  8. MATLAB中图像标注工具——Image Labeler的使用方法

    前言 深度学习中无论是什么任务,数据集是必不可少的,我们可以使用公开数据集,但实际情况中由于特定的任务我们可能也不得不手动制作数据集.正好本人最近在一个语义分割任务中涉及自己制作数据集,也就是标注图像 ...

  9. labelImg图像标注工具的详细使用

    一.Ubuntu16.04下安装labelImg图像标注工具 图像标注软件安装:安装方法 二.labellmg标注软件的使用 1.软件图标的使用 (1)打开需要标记的图片文件夹 (2)修改保存路径(X ...

  10. 【Matlab】Image labeler图像标注工具的使用

    记录Matlab 图像标注工具的使用 背景介绍 工具介绍 创建标签类型 图像标注 标注信息导出 导出信息处理 背景介绍 本次主要记录使用Matlab进行图像标注的一个过程,属于图像处理的一个前期工作, ...

最新文章

  1. @Autowire和@Resource注解使用的正确姿势,别再用错的了!!
  2. python学习笔记(十四)标准库urllib
  3. 告别CNN?计算机视觉也用上Transformer了
  4. split出现得问题
  5. 推荐系统实战系列(python版).rar_python实战音乐推荐系统
  6. 报错,Error starting ApplicationContext. To display the conditions report re-run your application with
  7. 农村电商的发展非常关键,那么农民要如何利用电商呢?
  8. windows 10 64位安装Python3.6.4
  9. StrictMode使用和查询联系人手机联系人和sim卡联系人
  10. 后端研发菜鸟成长记 第一章 入门 之 存活下来
  11. 中兴盒子B860AV2.1-A-B-M-U,通刷,线刷刷机固件
  12. 如何提升AD的采样频率
  13. iPhone手机使用:苹果新款手机(iPhone X、iPhone XS Max、iPhone XR等)关机、截屏等快捷键
  14. 解决显存不足:Out of video memory trying to allocate a rendering resource
  15. javaee.jar与servlet-api.jar
  16. 管理经济学【四】之 需求弹性与供给弹性分析
  17. 聚乙二醇衍生物MAL-PEG-NH2,Maleimide-PEG-amine,CAS:1207751-12-9​
  18. cad2023-autocad2023
  19. SolidWorks 2020安装失败,怎么完全彻底卸载删除清理干净SolidWorks 2020各种残留注册表和文件?【转载】
  20. 如何连接到console口进行防火墙/交换机的管理

热门文章

  1. java设计triangle三角形_Java:【三角形类Triangle】设计一个名为Triangle的类来扩展GeometricObject类。该类包括:...
  2. Intellij IDEA与Eclipse对比
  3. PDF文件secured去除限制
  4. Lua-面试考题附答案解析(一)
  5. java的高精度大数字运算的问题
  6. 小火狐进化_神奇宝贝:最强和最弱的御三家属于哪个世代?当然是这两代
  7. 中国大学慕课《数据挖掘与python实践》期末测验版本3
  8. FME会员期刊(2012冬季版)
  9. swift学习之旅之 iOS Flurry使用
  10. 差动变压器的振动测量实验 思考题