【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)

文章目录

  • 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/

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)_第1张图片

1. Method

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)_第2张图片

【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

你可能感兴趣的:(prompt,python,标注,深度学习,计算机视觉,openCV)