OpenCV之特征轮廓(Contour Properties)相关函数的使用(3)

为了发现不同的特征轮廓,比如面积,周长,质心,边界箱,OpenCV提供了很多相关的函数,下面对这些特征属性进行详细的介绍。

1、Aspect Ratio(纵横比)

物体边界矩形的宽度和高度比率,AspectRatio=Width/Height。

x,y,w,h = cv2.boundingRect(cnt)  //cnt是图像的contours属性

aspect_ratio = float(w)/h

 

2、Extent(面积比率/范围比率)

物体轮廓检测面值和物体矩形面值比,计算公式如下:Extent=ObjectArea/BoundingRectangleArea

area = cv2.contourArea(cnt)

x,y,w,h = cv2.boundingRect(cnt)

rect_area = w*h

extent = float(area)/rect_area

 

3、Solidity(强度比率)

物体轮廓面值与凸壳面积的比值,Solidity=ContourArea/ConvexHullArea

area = cv2.contourArea(cnt)

hull = cv2.convexHull(cnt)

hull_area = cv2.contourArea(hull)

solidity = float(area)/hull_area

 

4、Equivalent Diameter(等效直径)

等效直径类似圆的直径,其中唯一的区别就是,圆的面值换成轮廓图像的面值,公式为:EquivalentDiameter=sqrt(4×ContourArea/π)

area = cv2.contourArea(cnt)

equi_diameter = np.sqrt(4*area/np.pi)

 

5、Orientation(方向)

指向被检测物体的角度,下面的方法也给出了主轴和小轴的长度。

(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)

 

6、Mask and Pixel Points(蒙片和像素)

在某些情况下,我们可能需要包含该对象的所有点。可以这样做:

mask = np.zeros(imgray.shape,np.uint8)

cv2.drawContours(mask,[cnt],0,255,-1)

pixelpoints = np.transpose(np.nonzero(mask))

#pixelpoints = cv2.findNonZero(mask)

上面给了两种方法,其中一个是基于Numpy函数,一个是基于OpenCV函数,它们返回的结果是一样的,唯一的不同就是,Numpy给出的坐标是(row,column)格式,而OpenCV给出的坐标是(x,y)格式,因此他们是相互变通的,即row=x,column=y。

 

7、Maximun Value, Minimun Value and their location(最大值/最少值/位置)

可以通过mask 图像获取这些参数。

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)

 

8、Mean Color or Mean Intensity(平均色/平均强度)

可以通过grayscale模式及mask图像,可以获取物体的平均色和平均强度。

mean_val = cv2.mean(im,mask = mask)

 

9、Extreme Points(极值点)

极限点指的是物体的最上面、最下方、最右边和最左边的点。

leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])

rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])

topmost = tuple(cnt[cnt[:,:,1].argmin()][0])

bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])

比如,我们通过这个方式获取应用于印度地图,返回的结果如下:

10、Reference Material

资料1(Contour Properties):

https://docs.opencv.org/3.3.0/d1/d32/tutorial_py_contour_properties.html

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: