欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

opencv轮廓周长原理_OpenCV3 - 轮廓特征

发布时间:2024/4/13 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 opencv轮廓周长原理_OpenCV3 - 轮廓特征 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

矩(Moments)

图像矩可以帮助你计算一些特征, 例如对象的质心, 对象的面积等等. 具体可参考Image Moments

函数**cv.moments()** 返回一个所有矩值的字典

import numpy as np

import cv2 as cv

img = cv.imread('star.jpg',0)

ret,thresh = cv.threshold(img,127,255,0)

im2,contours,hierarchy = cv.findContours(thresh, 1, 2)

cnt = contours[0]

M = cv.moments(cnt)

print( M )

通过这些矩值, 你可以计算出有用的数据, 例如面积, 质心等等. 质心可以通过关系(Cx=M10/M00 and Cy=M01/M00)来获得.  通过如下计算获得

cx = int(M['m10']/M['m00'])

cy = int(M['m01']/M['m00'])

轮廓面积

轮廓面积可以通过函数**cv.contourArea()**获得, 或者通过M['m00']

area = cv.contourArea(cnt)

轮廓周长

轮廓周长可以使用**cv.arcLength()** 获得. 第二个参数指定图形是否闭环(如果是则为True), 否则只是一条曲线.

perimeter = cv.arcLength(cnt,True)

轮廓逼近

它逼近一个轮廓形状到另一个顶点数目较少的形状, 这取决于我们指定的精度. 它是Douglas-Peucker algorithm算法的一种实现.

第一个参数是轮廓

第二个参数称为ε, 它是从轮廓到近似轮廓的最大距离. 这是一个准确的参数。为了得到正确的输出, 需要明智地选择ε。

epsilon = 0.1*cv.arcLength(cnt,True)

approx = cv.approxPolyDP(cnt,epsilon,True)

如下的第二张图是ε设定为10%的结果, 第三张图是ε设定为1%的结果.

边框

直边界矩形

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

cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

旋转矩形

rect = cv.minAreaRect(cnt)

box = cv.boxPoints(rect)

box = np.int0(box)

cv.drawContours(img,[box],0,(0,0,255),2)

绿框是直边界矩形, 红框是旋转矩形

参考文件

总结

以上是生活随笔为你收集整理的opencv轮廓周长原理_OpenCV3 - 轮廓特征的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。