opencv 多边形近似物体形状 cv.approxPolyDP函数的应用

前面我们学习过最小外接矩和最小外接圆,那么可以用一个最小的多边形包围物体吗?当然可以:

其中 cv.approxPolyDP() 的参数1是源图像的某个轮廓;参数2(epsilon)是一个距离值,表示多边形的轮廓接近实际轮廓的程度,值越小,越精确;参数3表示是否闭合。

import cv2 as cv
import numpy as np

# 多边形逼近
# 1.先找到轮廓
img = cv.imread(‘unregular.jpg‘, 0)
_, thresh = cv.threshold(img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
contours, hierarchy = cv.findContours(thresh, 3, 2)
cnt = contours[0]

# 2.进行多边形逼近,得到多边形的角点
approx1 = cv.approxPolyDP(cnt, 3, True)
approx2 = cv.approxPolyDP(cnt, 15, True)
approx3 = cv.approxPolyDP(cnt, 75, True)

# 3.画出多边形
image = cv.cvtColor(img, cv.COLOR_GRAY2BGR)
cv.polylines(image, [approx1], True, (255, 0, 0), 2)
cv.polylines(image, [approx2], True, (0, 255, 0), 2)
cv.polylines(image, [approx3], True, (0, 0, 255), 2)

print(len(approx1),len(approx2),len(approx3))  # 角点的个数
cv.imshow(‘approxPloyDP‘, image)
cv.waitKey(0)
cv.destroyAllWindows()

可以看到,cv.approxPolyDP 函数 参数2(epsilon)越小,得到的多边形角点越多,对原图像的多边形近似效果越好。

原文地址:https://www.cnblogs.com/wojianxin/p/12610631.html

时间: 2024-11-06 09:49:44

opencv 多边形近似物体形状 cv.approxPolyDP函数的应用的相关文章

OpenCV中approxPolyDP()函数

CV_EXPORTS_W void approxPolyDP( InputArray curve, OutputArray approxCurve, double epsilon, bool closed ); @param curve Input vector of a 2D point stored in std::vector or Mat@param approxCurve Result of the approximation. The type should match the ty

opencv 利用cv.matchShapes()函数实现图像识别技术

在待识别图像上找到模板图像 待识别图像: 模板图像: 识别原理 1. 将待识别图像 -> 灰度图像 -> 二值图像 2. 通过轮廓检索函数 cv.findContours 找到待识别图像所有轮廓 3. 模板图像 -> 灰度图像 -> 二值图像 4. 通过轮廓检索函数 cv.findContours 找到模板图像中字母 A 的外轮廓 5. 将第2步得到的轮廓逐一和第4步得到的轮廓 通过 cv.matchShapes 函数进行形状匹配.找到其中最小值,最小值对应的待识别图像中的轮廓即为

opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解

函数 cv.findContours contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy[, offset]]] ) 参数1:源图像 参数2:轮廓的检索方式,这篇文章主要讲解这个参数 参数3:一般用 cv.CHAIN_APPROX_SIMPLE,就表示用尽可能少的像素点表示轮廓 contours:图像轮廓坐标,是一个链表 hierarchy:[Next, Previous, First

opencv函数之cv.InRange函数

2018-03-0421:22:46 (1)cv.InRange函数 void cvInRange(//提取图像中在阈值中间的部分 const CvArr* src,//目标图像const CvArr* lower,//阈值下限 const CvArr* upper,//阈值上限 CvArr* dst//结果图像 ) 历程:# 取出摄像头中,绿色的区域 import cv2 as cv import numpy as np def video_demo(): capture = cv.Video

二维物体形状识别方法比较

摘  要  针对模式识别中二维物体的形状识别问题,以二值图像中的物体形状为主要研究对象,依次从特征提取.分类器设计两个主要层面对形状识别方法进行了全面综述,并分析了国内外研究现状,特别是近年来所取得的最新研究成果.最后,指出了目前存在的问题以及今后的研究方向. 关键词  物体形状识别:特征提取:分类器设计 中图法分类号  TP391.41 Comparison on methods of 2D object shape recognition Abstract: In view of two-d

《学习opencv》笔记——关于一些绘图的函数

绘图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvScalar color,//颜色 int thickness = 1,//宽度 int connectivity = 8//反走样 ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> int main

Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~

之前介绍了haartraining程序中的cvCreateMTStumpClassifier函数,这个函数的功能是计算最优弱分类器,这篇文章介绍一下自己对haartraining中关于强分类器计算的一些理解,也就是程序中的icvCreateCARTStageClassifier函数. 由于haartraining是基于HAAR特征进行adaboost训练,对于HAAR特征的处理比较繁琐,采用了奇数弱分类器补充针对翻转特征最优弱分类器计算的代码,所以代码看起来较为冗长.此外,其采用了较多的中间结构

《学习opencv》笔记——关于一些画图的函数

画图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvScalar color,//颜色 int thickness = 1,//宽度 int connectivity = 8//反走样 ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> int main

OpenCV入门:(六:基础画图函数)

有时程序中需要画一些基础的图形,例如直线,矩形,椭圆以及多边形.OpenCV中当然有此类函数. 1.函数介绍 直线line: void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) img – 图像 pt1 – 直线起点 pt2 – 直线终点 color – 颜色 thickness – 粗细 lineType – 直线类型,可以