轮廓特征属性及应用

轮廓特征属性及应用

1)凸包

凸包(Convex Hull)是一个计算机几何图形学中的概念, 简单来说, 给定二维平面点集, 凸包就是能够将最外层的点连接起来构成的凸多边形, 它能够包含点集中所有的点。物体的凸包检测常应用在物体识别、手势识别及边界检测等领域。
在这里插入图片描述

寻找凸包—cv2.convexHull()

在这里插入图片描述
⚫points: 输入的二维点集, 可以填Mat类型或std::vector
⚫hull: 函数调用后找到的凸包
⚫clockwise: 操作方向标志符, 当为true时, 输出的凸包为顺时针方向, false为逆时针方向(假
定坐标系x轴指向右,y轴指向上方)
⚫returnPoints: 操作标志符, 默认值true. 当标志符为true时, 函数返回凸包各个点, 否则返回与凸包点对应的轮廓点的索引

for cnt in contours:
     hull = cv2.convexHull(cnt)#默认returnPoints=True
for cnt in contours :
    hull = cv2.convexHull(cnt,returnPoints=False)#print hull
    for i in range(0,len (hull)) :
         print hull[i]
         cv2.drawContours(img,contours[0] ,hull[il,(0,255,0) ,8)

在这里插入图片描述

凸性检测—cv2.isContourConvex()

在这里插入图片描述
⚫contour: 表示输入参数待检测凸性的轮廓
⚫retval: 返回值True或False

凸包缺陷分析—cv2.convexityDefects()

在这里插入图片描述
⚫contour: 表示输入参数检测到的轮廓, 可以用cv2.findContours函数获得
⚫convexhull: 输入参数表示检测到的凸包, 可以用cv2.convexHull函数获得
⚫convexityDefects: 检测到的最终结果, 应为vector<vector>类型, Vec4i
存储了起始点、结束点、距离及最远点到凸包的距离

使用特定形状的轮廓包围

在实际应用中, 经常会有将检测到的轮廓用多边形表示出来的需求, 提取包围轮廓的多边形也方便我们做进一步分析, 轮廓包围主要有一下几种:
◼轮廓外接矩形

◼轮廓最小外接矩形(旋转)

◼轮廓最小包围圆形

◼轮廓拟合椭圆

◼轮廓逼近多边形曲线

在这里插入图片描述
轮廓外接矩形—cv2.boundingRect()
在这里插入图片描述
⚫points: 输入的二维点集
⚫返回值: Rect类矩形对象(x,y,w,h)

扫描二维码关注公众号,回复: 14935814 查看本文章
for cnt in contours:
    (x,y, w,h) = cv2.boundingRect(cnt)
    cv2.rectangle (img,(x,y) ,(x+w,y+h), (0,255,0) ,2)
cv2.drawContours(img,contours,-1, (0,0,255) ,2)
cv2.putText (img, ("Num=%s"%str (len (contours))), (5,20), font, 0.8,(0 ,255,0)2)
for cnt in contours:
    (x,Y, w,h) = cv2.boundingRect(cnt)
    if(w>10 and h>10) :
       i+=1
       picName =./result/%d.jpg'%i #格式化字符串
       print picNameROI = temp[y:y+h,x:x+wlcv2 .imwrite(picName , ROI)
       cv2 .rectangle (img,(x,y),(x+w,y+h),(0,255,0) ,2)

在这里插入图片描述

1)最小外接矩形

轮廓最小外接矩形—cv2.minAreaRect()
在这里插入图片描述
在这里插入图片描述
⚫points: 输入的二维点集
⚫返回值: RotatedRect类矩形对象, 外接旋转矩形主要成员有center、size、 angle

在opencv中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆时针旋转角度为负,顺时针旋转角度为正。而RotatedRect类是以矩形的哪一条边与x轴的夹角作为角度的呢?angle 是水平轴(x轴)逆时针旋转,与碰到的第一个边的夹角,而opencv默认把这个边的边长作为width,angle的取值范围必然是负的.
在这里插入图片描述
类型结构说明
在这里插入图片描述

for cnt in contours :
    rect = cv2 .minAreaRect(cnt)
    box = cv2.boxPoints (rect)
    box = np.int0(box)
    print box
    img = cv2 .drawContours (img,[box],0,(0,255,0),2)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40911806/article/details/130055452
今日推荐