OpenCV图像轮廓

本文概述

  • 如何绘制轮廓?
  • 轮廓近似法
等高线定义为连接所有具有相同颜色或强度的连续点(沿边界)的曲线。在另一方面, 我们在二进制图像中找到计数器, 我们集中精力在二进制图像中找到边界。官方定义如下:
“ 轮廓” 是用于形状分析以及对象检测和识别的有用工具。
为了保持准确性, 我们应该使用二进制图像。首先, 我们应用阈值或精巧边缘检测。
在OpenCV中, 在二进制图像中查找轮廓与从黑色背景中查找白色对象相同。
OpenCV提供了findContours(), 用于在二进制图像中查找轮廓。语法如下:
cv2. findContours (thes, cv2.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

findContours()接受三个参数, 第一个参数是源图像, 第二个参数是轮廓检索模式, 第三个参数是轮廓逼近。
让我们考虑以下示例:
import numpy as npimport cv2 as cvim = cv.imread(r'C:\Users\DEVANSH SHARMA\binary.png')imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)ret, thresh = cv.threshold(imgray, 127, 255, 0)contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

如何绘制轮廓? OpenCV提供了cv2.drawContours()函数, 该函数用于绘制轮廓。它也可通过提供其边界点来绘制任何形状。 cv2.drawContours()函数的语法如下:
要在图像中绘制所有轮廓:
cv2.drawCounter(img, contours, -1, (0, 255, 0), 3)

要绘制单个轮廓, 假设第三个计数器
cnt = contours[3]cv2.drawCounter(img, [cnt], 0, (0, 255, 0), 3)

第一个参数表示图像源, 第二个参数表示应作为Python列表传递的轮廓, 第三个参数用作轮廓的索引, 其他参数用于颜色厚度。
轮廓近似法 它是cv2.findCounter()中的第三个参数。上面, 我们已经描述了它以相同的强度绘制形状的边界。它存储形状边界的(x, y)坐标。但是这里出现的问题是它是否存储所有坐标?这由轮廓逼近方法指定。
如果我们通过cv.CHAIN_APPROX_NONE, 它将存储所有边界点。有时它不需要存储所有的点坐标, 假设我们发现了一条直线的轮廓, 不需要存储所有的轮廓点, 而只需要存储两个端点即可。因此, 在这种情况下, 我们使用cv.CHAIN_APPROX_NONE, 它将删除所有冗余点并压缩轮廓, 从而节省内存。
示例1
OpenCV图像轮廓

文章图片
【OpenCV图像轮廓】在上面的矩形图像中, 第一个图像显示使用cv.CHAIN_APPROX_NONE(734)的点, 第二个图像显示使用cv2.CHAIN_APPROX_SIMPLE的点(仅4个点)。我们可以看到两个图像之间的差异。

    推荐阅读