详解在OpenCV中实现的图像标注技术

目录
  • 目录
  • 图像注解
  • 对图片注释的需求
  • 图像注解的类型
    • 分类法
    • 物体检测
    • 语义分割
  • 用OpenCV实现图像注解
    • 包围盒方法
    • KNN方法进行分割
  • 结论
  • 参考文献

图像标注在计算机视觉中很重要,计算机视觉是一种技术,它允许计算机从数字图像或视频中获得高水平的理解力,并以人类的方式观察和解释视觉信息。注释,通常被称为图片标签,是大多数计算机视觉模型发展中的一个关键阶段。本文将重点讨论在OpenCV的帮助下创建这些注释。以下是将要涉及的主题。

目录

  • 图像注解
  • 对图像注释的需求
  • 图像注解的类型
  • 用OpenCV实现图像注解

机器学习模型的表现越好,你的注释的质量就越高。让我们了解一下图像注释。

图像注解

在一个特定的数据集中对图像进行分类以训练机器学习模型的过程被称为图像注释。当人工注释完成后,被标记的图片由机器学习或深度学习模型处理,以重复注释,不需要人工干预。

因此,图片注释被利用来表明你的系统需要识别的方面。监督学习是在给定标记数据的情况下训练一个ML模型的过程。

图片注解建立了模型试图复制的标准,因此标签中的任何错误也会被重复。因此,正确的图片注释为训练神经网络奠定了基础,使注释成为计算机视觉中最关键的工作之一。

图片注释可以手工完成,也可以在自动注释工具的帮助下完成。自动注释技术通常是预先训练好的算法,可以准确地对照片进行标注。他们的注释是复杂的注释工作所需要的,如构建片段掩码,这需要时间来生成。

你是否在寻找数据科学中使用的Python库的完整库。 查看这里.

对图片注释的需求

对图片进行标注是功能数据集所需要的,因为它能让训练模型了解到图片的相关方面(类别),然后它可以用来在新鲜的、从未见过的图片中识别这些类别。

图像注释产生了训练数据,有监督的人工智能模型可以从中学习。注释图像的方式预测了人工智能在查看和学习图像后的行为方式。因此,在训练中经常描述糟糕的注释,导致模型做出糟糕的预测。

在应对独特的挑战和在新领域使用人工智能时,注释数据是非常重要的。对于像图像分类和分割这样的典型任务,经常有预训练的模型,它们可以通过使用转移学习以最小的输入量定制到特定的用例。

另一方面,从头开始训练一个全面的模型,经常需要大量的注释数据,分为训练集、验证集和测试集,这很难产生,也很费时。无监督算法,不需要注释数据,可以直接在原始数据上训练。

图像注解的类型

有三种盛行的图片注释方法,你为你的用例选择的方法将由项目的复杂性决定。每种使用的高质量图片数据越多,人工智能的预测就越准确。

分类法

分类是最简单、最快速的图片注释方法,因为它只需为一张图片分配一个标签。例如,你可以希望对一组杂货店货架的照片进行分类,以确定哪些照片含有苏打水,哪些不含有。

这种方法非常适合捕捉抽象信息,比如上面的例子,或者一天中的时间,如果图片中有汽车,或者从一开始就过滤掉不符合标准的照片。虽然分类法在提供单一的、高层次的标签方面是最快的,但它也是我们强调的三个类别中最模糊的,因为它不能确定物品在图像中的位置。

物体检测

注释者使用对象检测给图片中的特定事物贴上标签。因此,如果一张图片被标记为有冰激凌,这就更进一步说明了冰激凌在图片中的位置,或者如果特别是搜索可可冰激凌的位置。物体检测可以通过各种方法来完成,包括。

  • 边界框。注释者使用矩形和正方形来定义目标物体在二维中的位置。这是最经常使用的图片注释方法之一。立方体,也被称为三维边界框,被注释者用来指定目标对象的位置和深度。
  • 多边形分割。注释者采用复杂的多边形来指定不对称的目标项目的位置,而这些目标项目并不简单地适合在一个盒子里。
  • 线条。注释器检测图片中的基本边界线和曲线,用线条和样条来区分部分。例如,注释器可以为自驾车图片注释项目命名高速公路上的众多车道。

这种方法仍然不是最精确的,因为物体检测允许在使用方框或线条时出现重叠。它所提供的是项目的大致位置,同时仍然是一个相当快速的注释程序。

语义分割

语义分割克服了物体识别中的重叠问题,保证了图像的每个组成部分只属于一个类别。这种方法通常在像素层面上进行,需要注释者为每个像素分配类别(如行人、汽车或标志)。这有助于教导人工智能模型如何检测和分类某些项目,即使它们被遮挡。例如,如果一个购物车遮住了图像的一部分,可以用语义分割来定义可可冰淇淋的样子,直到像素级别,让模型知道它实际上仍然是可可冰淇淋。

用OpenCV实现图像注解

在这篇文章中,我们将使用边界框和颜色分割方法进行图像注释。

在边界框中,方法将是在物体周围手动绘制不同的边界形状,并在其中添加一些文字。

在颜色分割中,我们将使用KNN算法来分割查询图像中物体的颜色。颜色将根据 "K "值被分割,"K "是最近的邻居的数量,图像上被分割的部分可以被视为注释的部分。

包围盒方法

导入必要的库

import cv2
import numpy as np
import matplotlib.pyplot as plt

读取查询图像

input_img=cv2.imread('annotation_image.jpg',cv2.IMREAD_COLOR)

查询图像

在本文中,我们使用的是彩色图像,所以我们需要使用 "cv2.IMREAD_COLOR"。因为它指示加载一个彩色图片。任何图片的透明度都会被忽略。这是默认设置。我们也可以为这个标志传递整数值1。

在对象上画一条线

image_line=input_img.copy()
cv2.line(image_line, (900,150), (1100,150), (0,255,255), thickness=5,lineType=cv2.LINE_AA)
plt.figure(figsize=(10,10))
plt.imshow(image_line[:,:,::-1])
plt.show()

cv2.line需要输入直线的起点和终点的坐标,以及直线的厚度、透明度和颜色。

印度分析杂志

在物体周围画一个圆

image_circle=input_img.copy()
cv2.circle(image_circle, (1030,340),200, (0,255,255), thickness=5,lineType=cv2.LINE_AA)
plt.figure(figsize=(10,10))
plt.imshow(image_circle[:,:,::-1])
plt.show()

cv2.circle'接收半径和圆的坐标作为输入。其余部分与前面讨论的直线函数相同。

印度分析》杂志

在物体周围画一个矩形

image_rect=input_img.copy()
cv2.rectangle(image_rect, (900,150),(1100,530), (0,0,255), thickness=5,lineType=cv2.LINE_AA)
plt.figure(figsize=(10,10))
plt.imshow(image_rect[:,:,::-1])
plt.show()

它需要左上角的坐标和右下角的坐标来绘制矩形。

印度分析》杂志

KNN方法进行分割

导入必要的库

import cv2
import numpy as np
import matplotlib.pyplot as plt

读取和预处理

img = cv2.cvtColor(input_img,cv2.COLOR_BGR2RGB)
image_reshape = img.reshape((-1,3))
image_2d = np.float32(image_reshape)

改变颜色的顺序,因为在OpenCV中,图像的颜色是以蓝、绿、红(BGR)来读取的。要求是红、绿、蓝(RGB)。

应用KNN

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 1.0)
K = 4
attempts=10
ret,label,center=cv2.kmeans(twoDimage,K,None,criteria,attempts,cv2.KMEANS_PP_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
result_image = res.reshape((img.shape))

由于图像是一个高分辨率的图像,所以有很多数据点需要处理,如果迭代次数多,就会耗费时间。我们将迭代次数限制为100次,并且将ε值设置为最高值。k近邻被设置为4,尝试次数为10。

plt.figure(figsize=(10,10))
plt.imshow(result_image[:,:,::-1])
plt.show()

印度分析杂志

该算法对颜色进行了很好的分割。可以看到蓝色、白色、灰色和棕色被分开。人们可以对图像进行屏蔽,并进一步调整算法。

结论

处理数据最耗时的方面之一是数据收集和注释。然而,它是训练算法的基础,必须在可行的情况下以最大的精度执行。适当的注释经常会在后期创建模型的过程中节省大量的时间。通过这篇文章,我们已经了解了不同类型的注释和它们的实现。

参考文献

The postImage annotation techniques with implementation in OpenCVappeared first onAnalytics India Magazine.

到此这篇关于在OpenCV中实现的图像标注技术的文章就介绍到这了,更多相关OpenCV图像标注内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python基于OpenCV模块实现视频流数据切割为图像帧数据(流程分析)

    动态视频流数据的处理可以转化为静态图像帧的处理,这样就可以在不改动图像模型的情况下实现视频流数据的处理工作,当然视频流数据也可以采用视频的处理方法来直接处理,这里今天主要是实践一下视频流数据的预处理工作,即:将视频流数据切割为图像帧数据,实践内容很简单,具体如下所示: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能: 视频数据切割成图像数据 ''' import os import cv2 import numpy as n

  • Python OpenCV超详细讲解读取图像视频和网络摄像头

    0.准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库. 1.读取图像调用imread()方法获取我们资源文件夹中的图片使用imshow()方法显示图片,窗口名称为OutputwaitKey(0)这句可以让窗口一直保持,如果去掉这句,窗口会一闪而过 我们来看下效果: 2.读取视频VideoCapture()方法的参数就是视频文件循环中通过read不断地去读视频的每一帧,再通过imshow显示出来最后if语句代表按q可以退出程

  • Python+OpenCV实现在图像上绘制矩形

    话不多说,直接上代码 import copy import cv2 import numpy as np WIN_NAME = 'draw_rect' class Rect(object): def __init__(self): self.tl = (0, 0) self.br = (0, 0) def regularize(self): """ make sure tl = TopLeft point, br = BottomRight point ""

  • C++使用opencv读取图片的操作代码(图像处理)

    目录 代码理解 全部代码 读取结果 参考 代码理解 using namespace cv; 解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imread() int main(int argc, char** argv) { return 0: } 解释: // argc是命令行,总的参数个数; argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 // char *argv[] 用来取得你所输入的参数 /

  • Python OpenCV超详细讲解调整大小与图像操作的实现

    目录 准备工作 重新调整图像大小 图像裁剪 准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库. 我们还要知道在OpenCV中,坐标轴的方向是x轴向右,y轴向下,坐标原点在左上角,比如下面这张长为640像素,宽为480像素的图片.OK,下面开始本节的学习吧. 查看图像大小 调用imread()方法获取我们资源文件夹中的图片lambo.png 输出图像的shape属性 img=cv2.imread("Resources/lam

  • 详解在OpenCV中实现的图像标注技术

    目录 目录 图像注解 对图片注释的需求 图像注解的类型 分类法 物体检测 语义分割 用OpenCV实现图像注解 包围盒方法 KNN方法进行分割 结论 参考文献 图像标注在计算机视觉中很重要,计算机视觉是一种技术,它允许计算机从数字图像或视频中获得高水平的理解力,并以人类的方式观察和解释视觉信息.注释,通常被称为图片标签,是大多数计算机视觉模型发展中的一个关键阶段.本文将重点讨论在OpenCV的帮助下创建这些注释.以下是将要涉及的主题. 目录 图像注解 对图像注释的需求 图像注解的类型 用Open

  • 详解Python+OpenCV进行基础的图像操作

    目录 介绍 形态变换 腐蚀 膨胀 创建边框 强度变换 对数变换 线性变换 去噪彩色图像 使用直方图分析图像 介绍 众所周知,OpenCV是一个用于计算机视觉和图像操作的免费开源库. OpenCV 是用 C++ 编写的,并且有数千种优化的算法和函数用于各种图像操作.很多现实生活中的操作都可以使用 OpenCV 来解决.例如视频和图像分析.实时计算机视觉.对象检测.镜头分析等. 许多公司.研究人员和开发人员为 OpenCV 的创建做出了贡献.使用OpenCV 很简单,而且 OpenCV 配备了许多工

  • 详解在OpenCV中如何使用图像像素

    目录 切片操作 获取感兴趣区域的坐标值 使用切片操作裁剪图像 1.加载并显示原始图像 2.获取图像的空间维度 3.裁剪图像 4.使用尺寸将部分图像设置为特定颜色. 总结 像素是计算机视觉中图像的重要属性.它们是表示图像中特定空间中光的颜色强度的数值,是图像中数据的最小单位. 图像中的像素总数是高度.宽度和通道的乘积. 由于OpenCV中的图像被读取为像素值的Numpy数组,因此可以使用数组切片操作获取并处理由该区域的像素表示的图像区域. 切片操作用于检索序列子集,如列表.元组和数组,因此可用于获

  • 详解python opencv图像混合算术运算

    目录 图片相加 cv2.add() 按位运算 图片相加 cv2.add() 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同.         numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):         add()两个图片进行加和,大于255的使用255计数.         numpy会对结果取256(相当于255+1)的模: import numpy as np import c

  • 详解在Python中使用OpenCV进行直线检测

    目录 1.引言 2.霍夫变换 3.举个栗子 3.1读入图像进行灰度化 3.2执行边缘检测 3.3进行霍夫变换 补充 1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线.其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术. 2. 霍夫变换 霍夫变换是图像处理中的一种特征提取方法,可以识别图像中的几何形状.它将在参数空间内进行投票来决定其物体形状,通过检测累计结果找到一极大值所对应的解,利用此解即可得到一个符合特定形状的参数. 在使

  • 详解Python+OpenCV实现图像二值化

    目录 一.图像二值化 1.效果 2.源码 二.图像二值化(调节阈值) 1.源码一 2.源码二 一.图像二值化 1.效果 2.源码 import cv2 import numpy as np import matplotlib.pyplot as plt # img = cv2.imread('test.jpg') #这几行是对图像进行降噪处理,但事还存在一些问题. # dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21) # plt

  • 详解Python+opencv裁剪/截取图片的几种方式

    前言 在计算机视觉任务中,如图像分类,图像数据集必不可少.自己采集的图片往往存在很多噪声或无用信息会影响模型训练.因此,需要对图片进行裁剪处理,以防止图片边缘无用信息对模型造成影响.本文介绍几种图片裁剪的方式,供大家参考. 一.手动单张裁剪/截取 selectROI:选择感兴趣区域,边界框框选x,y,w,h selectROI(windowName, img, showCrosshair=None, fromCenter=None): . 参数windowName:选择的区域被显示在的窗口的名字

  • 详解Python OpenCV数字识别案例

    前言 实践是检验真理的唯一标准. 因为觉得一板一眼地学习OpenCV太过枯燥,于是在网上找了一个以项目为导向的教程学习.话不多说,动手做起来. 一.案例介绍 提供信用卡上的数字模板: 要求:识别出信用卡上的数字,并将其直接打印在原图片上.虽然看起来很蠢,但既然可以将数字打印在图片上,说明已经成功识别数字,因此也可以将其转换为数字文本保存.车牌号识别等项目的思路与此案例类似. 示例: 原图 处理后的图 二.步骤 大致分为如下几个步骤: 1.模板读入 2.模板预处理,将模板数字分开,并排序 3.输入

  • 详解C++ OpenCV实现图像拼接的原理及方法

    目录 前言 一.图像拼接相关原理 图像特征采集 特征提取算法 透视变换 透视矩阵 图像拷贝 二.案例实现 Step1:导入目标图片 Step2:特征点提取和匹配 Step3:图像配准 Step4:图像拷贝 Step5:图像融合 完整代码 三.总结 前言 本文以实现图像拼接为目标,把分割开的图像进行拼接还原,核心的内容包括:OpenCV图像拼接相关原理以及OpenCV图像拼接案例的实现 一.图像拼接相关原理 图像特征采集 一幅图中总存在着一些独特的像素点,这些点我们可以认为就是这幅图的特征,即为特

  • 详解Python OpenCV图像分割算法的实现

    目录 前言 1.图像二值化 2.自适应阈值分割算法 3.Otsu阈值分割算法 4.基于轮廓的字符分离 4.1轮廓检测 4.2轮廓绘制 4.3包围框获取 4.4矩形绘制 前言 图像分割是指根据灰度.色彩.空间纹理.几何形状等特征把图像划分成若干个互不相交的区域. 最简单的图像分割就是将物体从背景中分割出来 1.图像二值化 cv2.threshold是opencv-python中的图像二值化方法,可以实现简单的分割功能. retval, dst = cv2.threshold(src, thresh

随机推荐