文章目录
- 0. Background
- 1. Method
- 2. Code
- 3. Example: 雄鹿红外图像标注
- 3.1 选择色彩空间
- 3.2 执行阈值
- 3.3 执行形态学操作
- 3.4 轮廓分析以找到边界框
- 3.5 过滤不需要的轮廓
- 3.6 绘制边界框
- 3.7 以需要的格式保存
- Reference
本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包含详细步骤 + 源码),希望对大家有所帮助。
0. Background
样本标注是深度学习项目中最关键的部分,甚至在模型学习效果上起决定性作用。但是,标注工作往往非常繁琐且耗时。一种解决方案是使用自动图像标注工具,它可以大大减少标注的时间。
本文主要介绍的半自动标注工具为pyOpenAnnotate,此工具是基于Python和OpenCV实现,最新版本为0.4.0,可通过下面指令安装使用:
pip install pyOpenAnnotate
https://pypi.org/project/pyOpenAnnotate/
1. Method
【1】Threshold(二值化)只接受单通道图像,但这里并不是直接使用灰度转换图来处理,而是从灰度图、R、G、B、H、S、V通道图像中找到对比度最高的图像来做二值化。
【2】二值化之后并不能保证总是得到我们需要的掩码,有时会有噪声、斑点、边缘的干扰,所以加入了膨胀、腐蚀等形态学处理。
【3】最后通过轮廓分析得到对象的边界框,也就是左上角和右下角坐标。
2. Code
首先需要导入所需库:
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['image.cmap'] = 'gray'
加载图像:
stags = cv2.imread('stags.jpg')
boars = cv2.imread('boar.jpg')
berries = cv2.imread('strawberries.jpg')
fishes = cv2.imread('fishes.jpg')
coins = cv2.imread('coins.png')
boxes = cv2.imread('boxes2.jpg')
选择色彩空间 (这里添加了 RGB和HSV,存储在字典中,方便验证使用):
def select_colorsp(img, colorsp='gray'):# Convert to grayscale.gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Split BGR.red, green, blue = cv2.split(img)# Convert to HSV.im_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# Split HSV.hue, sat, val = cv2.split(im_hsv)# Store channels in a dict.channels = {'gray':gray, 'red':red, 'green':green, 'blue':blue, 'hue':hue, 'sat':sat, 'val':val