图像轮廓之矩特征

2021-11-06  本文已影响0人  大龙10

《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05

第12章 图像轮廓

12.2 矩特征

1) 矩的计算:moments函数

  OpenCV提供了函数cv2.moments()来获取图像的moments特征。通常情况下,我们将使用函数cv2.moments()获取的轮廓特征称为“轮廓矩”。轮廓矩描述了一个轮廓的重要特征,使用轮廓矩可以方便地比较两个轮廓。
函数cv2.moments()的语法格式为:

retval=cv2.moments(array [, binaryImage])

式中有两个参数:

该函数的返回值retval是矩特征,主要包括:
(1)空间矩

(2)中心矩

(3)归一化中心矩

在OpenCV中,函数cv2.moments()会同时计算上述空间矩、中心矩和归一化中心距。

2) 计算轮廓的面积:contourArea函数

函数cv2.contourArea()用于计算轮廓的面积。该函数的语法格式为:

retval=cv2.contourArea(contour[, oriented])

式中的返回值retval是面积值。
式中有两个参数:

【例12.6】使用函数cv2.contourArea()计算各个轮廓的面积,将面积大于15000的轮廓筛选出来。

#筛选出大于特定大小的轮廓
import cv2
import numpy as np
o = cv2.imread('contours.bmp')  
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)  
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)  
image,contours, hierarchy = cv2.findContours(binary,
                                             cv2.RETR_LIST,
                                             cv2.CHAIN_APPROX_SIMPLE)  
n=len(contours)
contoursImg=[]
for i in range(n):
    temp=np.zeros(o.shape,np.uint8)
    contoursImg.append(temp)
    contoursImg[i]=cv2.drawContours(contoursImg[i],
               contours,i,(255,255,255),3)
    if cv2.contourArea(contours[i])>15000:
        cv2.imshow("contours[" + str(i)+"]",contoursImg[i])    
cv2.waitKey()
cv2.destroyAllWindows()

3) 计算轮廓的长度:arcLength函数

函数cv2.arcLength()用于计算轮廓的长度,其语法格式为:

retval=cv2.arcLength(curve, closed)

式中返回值retval是轮廓的长度(周长)。
上式中有两个参数:

上一篇下一篇

猜你喜欢

热点阅读