欢迎光临散文网 会员登陆 & 注册

【第17节】OpenCV轮廓初识

2022-11-22 12:39 作者:海鸥之道  | 我要投稿

目标

  • 理解什么是轮廓

  • 学习找轮廓,绘制轮廓等

  • 函数:CV2.findContours(),CV2.drawContours()

1、什么是轮廓

        轮廓可以简单认为成将连续的点(连着边界)连在- -起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。

  • 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者Canny边界检测。

  • 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。

  • 在OpenCV中,查找轮廓就像在黑色背景中超白色物体。你应该记住,要找的物体应该是白色而背景应该是黑色。

        让我们看看如何在一个二值图像中查找轮廓:

        函数CV2.findContours() 有三个参数,第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。返回值有三个,第一个是图像,第二个是轮廓,第三个是(轮廓的)层析结构。轮廓(第二个返回值)是一个Python列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个Numpy数组,包含对象边界点(x, y )的坐标。

2、怎样绘制轮廓

        函数CV2.drawContours(可以被用来绘制轮廓。它可以根据你提供的边界点绘制任何形状。它的第一个参数轮廓,一个Python列表;第二个参数是轮廓的索引(在绘制独立轮廓是很有用,当设置为-1时绘制所有轮廓)。接下来的参数是轮廓的颜色和厚度等。

        在一幅图像.上绘制所有的轮廓:

结果:

3、轮廓的近似方法

        这是函数CV2.findCountours()的第三个参数。它到底代表什么意思呢?

        上边我们已经提到轮廓是一个形状具有相同灰度值的边界。它会存贮形状边界上所有的(x,y)坐标。但是需要将所有的这些边界点都存储吗?这就是这个参数要告诉函数CV2.findContours的。这个参数如果被设置为CV2.CHAIN APPROX NONE,所有的边界点都会被存储。但是我们真的需要这么多点吗?例如,当我们找的边界是一条直线时。你用需要直线上所有的点来表示直线吗?不是的,我们只需要这条直线.的两个端点而已。这就是CV2.CHAIN APPROX_ SIMPLE要做的。它会将轮廓_上的冗余点都去掉,压缩轮廓,从而节省内存支。

 

【第17节】OpenCV轮廓初识的评论 (共 条)

分享到微博请遵守国家法律