基于人工智能实验平台的OpenCV多边形逼近对象检测

1.实验目的

熟悉opencv读入图片,绘制多边形边框.

2.实验设备

安装了python和pychrm的电脑一台。

3.实验内容

包含图片的导入、绘制矩形、显示图片。

4.实验原理

在OpenCV中,寻找的物体是白色的,而背景必须是黑色的,因此图片预处理时必须保证这一点。所以在轮廓检测之前,首先要对图片进行二值化或者Canny边缘检测。
我们将图像二值化后,用findContours函数就可以很方便的找出图像的轮廓信息,循环遍历每一个信息点,cv2.rectangle函数画出来即可。
质心:
首先,使用findContour()函数找出图像中包含的轮廓信息,然后对所有轮廓进行遍历,并计算每一个轮廓的力矩(Moment),就可以得出物体的质心位置:
在这里插入图片描述

轮廓近似:
将轮廓形状近似到另外一种由更少点组成的轮廓形状,新轮廓的点的数目由我们设定的准确度来决定。为了帮助理解,假设我们要在一幅图像中查找一个矩形,但是由于图像的种种原因,我们不能得到一个完美的矩形,而是一个“坏形状”(如下图所示)。现在你就可以使用这个函数来近似这个形状()了。这个函数的第二个参数叫epsilon,它是从原始轮廓到近似轮廓的最大距离。它是一个准确度参数。选择一个好的 epsilon 对于得到满意结果非常重要。

epsilon = 0.1*cv2.arcLength(cnt,True) 
approx = cv2.approxPolyDP(cnt,epsilon,True)

在这里插入图片描述
轮廓检测

approxPolyDP()函数是opencv中对指定的点集进行多边形逼近的函数,其逼近的精度可通过参数设置,返回参数是输出的点集,当前点集是能最小包容指定点集的,画出来即是一个多边形。主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合。
函数原型:

approxPolyDP(contourMat, double , closed)

第一个参数 contourMat:即轮廓的点集信息
第二个参数double epsilon:是一个距离值,即是原始曲线与近似曲线之间的最大距离,表示多边形的轮廓接近实际轮廓的程度,值越小,越精确
第三个参数bool closed:若为tru,则说明近似曲线是闭合的,反之,若为false,则断开。

该函数采用是道格拉斯-普克算法(Douglas-Peucker)来实现。该算法也以Douglas-Peucker算法和迭代终点拟合算法为名。是将曲线近似表示为一系列点,并减少点的数量的一种算法。
经典的Douglas-Peucker算法描述如下:
(1)在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦;
(2)得到曲线上离该直线段距离最大的点C,计算其与AB的距离d;
(3)比较该距离与预先给定的阈值threshold的大小,如果小于threshold,则该直线段作为曲线的近似,该段曲线处理完毕。
(4)如果距离大于阈值,则用C将曲线分为两段AC和BC,并分别对两段取信进行1~3的处理。
(5)当所有曲线都处理完毕时,依次连接各个分割点形成的折线,即可以作为曲线的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值