2018做网站赚钱不,网站手机模板的特点,电子上网站建设与维护,wordpress响应式 代码文章目录 前言一、查找轮廓二、绘制轮廓轮廓面积轮廓周长 前言
轮廓提取的前提#xff0c;将背景置为黑色#xff0c;目标为白色#xff08;利用二值化或Canny#xff09;
边缘检测#xff0c;例如Canny等#xff0c;利用梯度变化#xff0c;记录图像中的边缘像素点将背景置为黑色目标为白色利用二值化或Canny
边缘检测例如Canny等利用梯度变化记录图像中的边缘像素点返回和源图片一样尺寸和类型的边缘图。
轮廓检测则是将得到的每一个轮廓信息存储下来记录的是轮廓之间和内部的信息。 一、查找轮廓
contours, hierarchy cv2.findContours(image, mode, method)参数
Image输入的二值图像用于检测轮廓
mode轮廓检索模式决定函数如何检索和返回轮廓。
cv2.RETR_EXTERNAL只检索最外层的轮廓。忽略轮廓内部的任何嵌套轮廓。cv2.RETR_LIST检索所有轮廓但不建立轮廓之间的父子关系。所有的轮廓都被放置在同一个列表中但彼此之间没有层级结构。cv2.RETR_CCOMP检索所有轮廓并建立两层轮廓间的父子关系。外层轮廓是物体的外边界内层轮廓是物体的内孔边界。如果内孔内还有另一个连通物体这个物体的边界也会被检索出来并作为外层的子轮廓。cv2.RETR_TREE检索所有轮廓并建立完整的轮廓层级结构。这种模式下轮廓之间的父子关系被完整地保存下来形成一个树状结构。
method轮廓近似方法决定轮廓如何被表示和存储。不同的近似方法会影响轮廓的精度和所需的存储空间。
cv2.CHAIN_APPROX_NONE存储所有的轮廓点。这是最高精度的表示方法但会占用较多的存储空间。cv2.CHAIN_APPROX_SIMPLE仅存储轮廓的端点。这种方法会压缩水平方向、垂直方向和对角线方向上的轮廓点只保留端点。例如一个矩形轮廓只需存储四个角点即可。 返回值contours一个 Python 列表其中包含了图像中所有的轮廓。每个轮廓都是一个点集NumPy 数组表示轮廓上的所有点。hierarchy一个 NumPy 数组包含了轮廓的层次结构信息。对于每个轮廓它包含了四个值[Next, Previous, First Child, Parent]。这个数组对于理解轮廓之间的关系非常有用。
二、绘制轮廓
mage cv2.drawContours(image, contours, contourIdx, color, thickness)
img cv2.drawContours(img, contours, -1, (0, 255, 0), 2)参数
image目标图像轮廓将被绘制在这个图像上。contours要绘制的所有轮廓。contourIdx指定要绘制的轮廓索引。如果是 -1则绘制所有轮廓。color轮廓的颜色。thickness轮廓线的厚度。
轮廓面积
cv2.contourArea(contour, oriented)
area cv2.contourArea(contours[0])contour这是一个轮廓的点集通常通过 cv2.findContours() 函数获得。它是一个 NumPy 数组其中包含了轮廓上所有点的坐标。oriented可选这是一个布尔值参数。如果提供了这个参数并且其值为 True则函数返回的面积值将带有方向性正数表示轮廓是逆时针方向负数表示轮廓是顺时针方向。如果未提供此参数或参数值为 False默认值则函数返回的面积值为绝对值即不考虑轮廓的方向。
轮廓周长
cv2.arcLength(curve, closed)
length cv2.arcLength(contours[0], True)curve轮廓的点集通过 cv2.findContours() 函数获得。是一个 NumPy 数组其中包含了轮廓上所有点的坐标。closed布尔值参数用于指定轮廓是否是闭合的。如果轮廓是闭合的例如一个完整的圆或正方形则将此参数设置为 True。如果轮廓不是闭合的例如一条线段或圆弧的一部分则将此参数设置为 False。