资讯专栏INFORMATION COLUMN

边缘和轮廓检测——计算机视觉的应用

mo0n1andin / 3683人阅读

摘要:它是图像处理图像模式识别和计算机视觉技术的基本步骤之一。轮廓检测可能是一种用于形状分析和对象检测和识别的有用技术。对整个图像进行边缘检测,而仅对图像内的对象进行轮廓检测。

计算机视觉的重点是从计算机中的视频和图像中提取有意义的信息。在本文中,我们将从初学者开始探索一个使用 OpenCV 的出色计算机视觉项目。

其标题是“使用计算机视觉进行边缘和轮廓检测”。对于此项目,你还将看到描述、源代码和图像分类。

边缘检测

边缘检测是一种用于定位图像中对象边界的图像处理技术。最流行和广泛使用的算法之一是 Canny 边缘检测器。

Canny 边缘检测器是一种立足点检测算子,它使用多阶段算法来检测图像中的各种边缘。

主要阶段是:

  1. 使用高斯模糊算法,过滤掉图像。

  2. 在 Sobel 滤波器的帮助下,找出边缘的强度和方向。

  3. 通过应用非极大值抑制来隔离更强的边缘并将它们细化为一条像素宽的线。

  4. 使用滞后来隔离最简单的边缘。

下面我们安装 OpenCV :

pip3 install opencv-python matplotlib numpy

打开一个 Python 文件并按照以下步骤操作:

import cv2import numpy as npimport matplotlib.pyplot as plt

现在为了检测它的边缘,我们必须读取图像:

# read the imageimage = cv2.imread("little_flower.jpg")

首先,我们必须将图像转换为灰度,然后,我们可以继续将图像绕过 Canny 边缘检测器。

我们来看一下:

# convert it to grayscalegray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

让我们来看看它:

# show the grayscale imageplt.imshow(gray, cmap="gray")plt.show()

在 Canny 算法的帮助下,我们必须标记作为输入的图像中的边缘。

输入图像首先传递给 cv2.Canny() 函数,然后用于边缘检测。

# perform the canny edge detector to detect image edgesedges = cv2.Canny(gray, threshold1=30, threshold2=100)

阈值 1 和阈值 2 之间的最小值用于边缘链接。最重要的值用于寻找强边缘的初始段。

让我们看看结果图像:

有趣的是,尝试微调边缘值,看看你是否会让它变得更好。

如果你想使用实时摄像头,这里是完整的代码:

import NumPy as npimport cv2cap = cv2.VideoCapture(0)while True:    _, frame = cap.read()    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    edges = cv2.Canny(gray, 30, 100)    cv2.imshow("edges", edges)    cv2.imshow("gray", gray)    if cv2.waitKey(1) == ord("q"):        breakcap.release()cv2.destroyAllWindows()

检测边缘的最终目的是捕捉重要事件并在行星属性内执行所需的更改。它是图像处理、图像模式识别和计算机视觉技术的基本步骤之一。

轮廓检测

一个轮廓可以描述为一条曲线,将所有具有相同颜色或强度的连续点组合在一起。基本上,它们显示图片中包含的对象的形状。轮廓检测可能是一种用于形状分析和对象检测和识别的有用技术。

轮廓检测并不是图像分割的唯一算法,还有很多其他算法,例如目前最先进的语义分割、霍夫变换和 K-Means 分割。

为了获得更好的准确性,我们将遵循以下整个流程来成功检测图像中的轮廓:

  • 输入图像的标准化是它应该始终是二进制形式。这就是为什么我们需要将其转换为二进制格式。

  • 用于查找轮廓的 OpenCV 函数是 findContours()。

  • 最后,我们必须绘制这些轮廓来显示图像。

好吧,让我们开始吧。

首先,让我们为这个项目安装所有必需的依赖项:

pip3 install matplotlib opencv-python

在这里,我们导入所需的模块:

import cv2import matplotlib.pyplot as plt

让我们加载本教程中使用的图像:

# read the imageimage = cv2.imread("thumbs_up_down.jpg")

将其转换为 RGB,然后转换为灰度:

# convert to RGBimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# convert to grayscalegray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

正如本教程前面提到的,我们要创建一个二值图像,这表明图像的每个像素要么是黑色的,要么是白色的。

你可以将其进行比较,就像查找轮廓与检测黑板上的白色物体更相似。我们要找的物体是白色的,所以黑板需要是纯黑色的。

# create a binary thresholded image_, binary = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)# show itplt.imshow(binary, cmap="gray")plt.show()

通过禁用像素(即将其设置为0)和启用像素(即将其设置为225),创建二进制图像。以下是输出图像:

现在,对于 OpenCV 来说,这通常很容易检测轮廓:

# find the contours from the thresholded imagecontours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# draw all contoursimage = cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

上述代码很容易找到二值图像中的轮廓,最后借助粗绿线将它们输出到图像中,让我们展示一下:

# show the image with the drawn contoursplt.imshow(image)plt.show()

输出图像:

为了在不同的世界图像上获得良好的结果,你需要调整阈值或执行边缘检测。例如,对于煎饼图像,我将边缘减少到 127,结果如下:

轮廓检测和边缘检测的区别

轮廓检测的目标是确定闭合物体的形状,特别是因为对于具有相同颜色强度的连续点,寻找轮廓的方法是确定的,而边缘检测是通过检测颜色强度内的变化来进行的。对整个图像进行边缘检测,而仅对图像内的对象进行轮廓检测。

结论

这个项目是初学者级别的,面向数据科学爱好者。本文旨在让你熟悉最简单的计算机视觉项目,以增强你在计算机视觉方面的知识。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121819.html

相关文章

  • 【2021 亚太杯数学建模】赛题A-Image Edge Analysis and applicat

    摘要:图图像边缘检测图图像边缘轮廓图图像的亚像素边缘轮廓问题建立一个数学模型分析亚像素边缘提取的方法和过程。基于矩的亚像素边缘检测利用矩的积分算子来定位亚像素边缘,之所以选择矩,是因为这种算法对噪声不敏感。 ...

    不知名网友 评论0 收藏0
  • 深度学习在算机视觉领域(图像,视频,3-D点云,深度图)应用一览 算机视觉图像处理

    摘要:现在这种天然的特征描述机制,给图像预处理提供了不错的工具,它能将图像处理和视觉预处理合二为一。前面运动估计已经用深度学习求解了,现在这两个问题自然也是。和上个问题类似,采用深度图学习做合成图像,也属于空间。 ...

    ztyzz 评论0 收藏0
  • 2021年亚太杯数学建模竞赛解题思路

    摘要:题目年亚太数学建模竞赛问题热光伏技术中热辐射器的优化设计近年来,世界各大国纷纷将目光投向星海,制定了各种太空探索方案。 文章目录 A题 图像边缘分析与应用题目 ...

    不知名网友 评论0 收藏0
  • 使用 OpenCV Python 识别数字

    摘要:使用和识别数字本文演示如何使用和识别图像中的数字。透视变换会给我一个很好的提取。使用识别实际数字将涉及将数字划分为七个部分。使用计算机视觉和识别数字让我们继续开始这个例子。数组中的表示给定的段已打开,零表示该段已关闭。 ...

    FleyX 评论0 收藏0
  • OpenCV图像梯度(SobelScharr)

    摘要:图像梯度是什么图像梯度是许多计算机视觉和图像处理程序的基本组成部分。因此,边缘可以对应于图像中对象的边界图像中阴影或光照条件的边界对象中局部的边界图像梯度定义为图像强度的方向变化。 ...

    chunquedong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<