Android OpenCV(三十七):轮廓外接多边形

这篇具有很好参考价值的文章主要介绍了Android OpenCV(三十七):轮廓外接多边形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 参数四:closed,逼近曲线是否闭合的标志,true表示封闭,false,表示不封闭。

该方法使用的是Douglas-Peucker algorithm(道格拉斯-普克算法)Douglas-Peukcer算法由D.Douglas和T.Peueker于1973年提出,也称为拉默-道格拉斯-普克算法迭代适应点算法分裂与合并算法D-P算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法,是线状要素抽稀的经典算法。用它处理大量冗余的几何数据点,既可以达到数据量精简的目的,又可以在很大程度上保留几何形状的骨架。现有的线化简算法中,有相当一部分都是在该算法基础上进行改进产生的。它的特点是具有平移和旋转不变性,给定曲线与阈值后,抽样结果一定

算法的基本思路为:

对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用dmax与限差D相比: 若dmax<D,这条曲线上的中间点全部舍去; 若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

操作

/**

  • 轮廓外接多边形
  • author: yidong
  • 2020/10/7
    */
    class ContourPolyActivity : AppCompatActivity() {

private lateinit var mBinding: ActivityContourPolyBinding
private var mSource: Mat = Mat()
private var mGray: Mat = Mat()
private var mBinary: Mat = Mat()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_contour_poly)
mBinding.presenter = this
val bgr = Utils.loadResource(this, R.drawable.contourpoly)
Imgproc.cvtColor(bgr, mSource, Imgproc.COLOR_BGR2RGB)
Imgproc.cvtColor(bgr, mGray, Imgproc.COLOR_BGR2GRAY)
Imgproc.GaussianBlur(mGray, mGray, Size(5.0, 5.0), 2.0, 2.0)
Imgproc.threshold(
mGray,
mBinary,
20.0,
255.0,
Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU
)
mBinding.ivLena.showMat(mBinary)
}

fun findRect(flag: Int) {
val tmp = mSource.clone()
val contours = mutableListOf()
val hierarchy = Mat()
Imgproc.findContours(
mBinary,
contours,
hierarchy,
Imgproc.RETR_TREE,
Imgproc.CHAIN_APPROX_SIMPLE
)

for (i in 0 until contours.size) {
when (flag) {
0 -> {
title = “最大外接矩形”
val rect = Imgproc.boundingRect(contours[i])
Imgproc.rectangle(tmp, rect, Scalar(255.0, 255.0, 0.0), 4, Imgproc.LINE_8)
}
1 -> {
title = “最小外接矩形”
val source = MatOfPoint2f()
source.fromList(contours[i].toList())
val rect = Imgproc.minAreaRect(source)
val points = arrayOfNulls(4)
val center = rect.center
rect.points(points)
Log.d(App.TAG, “RotateRect: p o i n t s . t o L i s t ( ) , C e n t e r : {points.toList()}, Center: points.toList(),Centercenter”)
for (j in 0…3) {
Imgproc.line(
tmp,
points[j % 4],
points[(j + 1) % 4],
Scalar(255.0, 255.0, 0.0),
4,
Imgproc.LINE_8
)
}
}
else -> {
title = “轮廓多边形”
val result = MatOfPoint2f()
val source = MatOfPoint2f()
source.fromList(contours[i].toList())
Imgproc.approxPolyDP(source, result, 4.0, true)
Log.d(App.TAG, “Poly: ${result.dump()}”)
val points = result.toArray()
for (j in points.indices) {
Imgproc.line(
tmp,
points[j % points.size],
points[(j + 1) % points.size],
Scalar(255.0, 255.0, 0.0),
4,
Imgproc.LINE_8
)
}
}
}
}
mBinding.ivResult.showMat(tmp)
tmp.release()
hierarchy.release()
}

override fun onDestroy() { mSource.release() mGray.release() mBinary.release() super.onDestroy() } } 效果

源码

github.com/onlyloveyd/…

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

最后

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

Android OpenCV(三十七):轮廓外接多边形,程序员,android,opencv,人工智能

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

的学习方向达到有效的学习效果。**

[外链图片转存中…(img-qJJFzd6c-1712144526947)]文章来源地址https://www.toymoban.com/news/detail-850182.html

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

到了这里,关于Android OpenCV(三十七):轮廓外接多边形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • cv2.approxPolyDP函数实现轮廓线的多边形逼近

    cv2.approxPolyDP函数实现轮廓线的多边形逼近

            实际项目需要拟合轮廓线,提取更贴合目标的四个点,于是找到了cv2.approxPolyDP函数。cv2.approxPolyDP() 使用了Douglas-Peucker算法,算法原理如下: 输入一组曲线点集合S,输出折线点集合T流程:         step1、设阈值thresh,取A的起点A和终点B加入T;         st

    2023年04月13日
    浏览(47)
  • 基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

    使用基于C++的OpenCV库来绘制多边形,并且为多边形的不同边使用不同的颜色,可以按照以下步骤进行操作: 首先,确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件: 创建一个空白的图像,然后绘制多边形,并为每条边选择不同的颜色: 在这个示例中,

    2024年02月13日
    浏览(47)
  • opencv 判断点在多边形内外

    opencv 判断点在多边形内外

            基于Python 和 OpenCV 画出多边形,以及判断某个点是不是在多边形内。         函数定义:cv2.pointPolygonTest(contour, pt, measureDist)         函数功能:找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果

    2024年02月12日
    浏览(49)
  • python opencv 绘制矩形、圆、线、多边形

    python opencv 绘制矩形、圆、线、多边形

    👨‍💻 个人简介: 深度学习图像领域工作者 🎉 总结链接:              链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:                     📌 1.工作中常用深度学习脚本                     📌 2.to

    2024年02月03日
    浏览(192)
  • Python:opencv画点、圆、线、多边形、矩形

    Python:opencv画点、圆、线、多边形、矩形

    简介 :机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程 Python:调用摄像头使用cv2库录制视频 Python:视频拆分成一帧一帧的图片

    2024年02月04日
    浏览(49)
  • 使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C++原型如下: 函数polylines()的Python原型如下: 函数polylines()的参数意义如下: img—绘制的多条相连线段或多边形所在

    2024年02月04日
    浏览(47)
  • Python OpenCV实现鼠标绘制矩形框和多边形

    Python OpenCV实现鼠标绘制矩形框和多边形

    目录 Python OpenCV实现鼠标绘制矩形框和多边形 1. OpenCV鼠标事件操作说明 (1)setMouseCallback函数说明 (2)回调函数onMouse说明 (3)event 具体说明: (4)flags 具体说明 2. OpenCV实现鼠标绘制矩形框和多边形框 (1)绘制矩形框 (2)绘制多边形 (3)键盘控制 3. 完整的代码 本篇将

    2024年02月06日
    浏览(73)
  • [C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景

    [C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景

    OpenCV中的 approxPolyDP() 函数用于对形状进行逼近,以减少多边形的顶点数,可以用于对图像轮廓点进行多边形拟合。 函数原型如下: 其中, curve 是输入的点集,类型为 InputArray, 可以是 Mat 、 vectorPoint 等; approxCurve是输出的点集,类型为 OutputArray, 也是 Mat 类型; epsilon 是精

    2024年03月14日
    浏览(47)
  • [C++] opencv - fillPoly(填充多边形)函数介绍和使用场景

    [C++] opencv - fillPoly(填充多边形)函数介绍和使用场景

    fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。函数原型如下: fillPoly() 函数适用于需要绘制填充多边形的场景,例如在图像上绘制一个封闭的图形、制作一个简单的遮罩等。   fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。可以用来绘制实心三角形,实心矩形,实

    2024年02月19日
    浏览(287)
  • OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

    OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

    目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse()  4.绘制矩形rectangle() 5.绘制多边形 fillPoly()  6.绘制文字putText() 7.例子 1.绘制直线line() img:绘制圆形的图像 ptl:直线起始点在图像中的坐标 pt2: 直线终点在图像中的坐标 color:圆形的颜色,用三通道表示 thickness:轮廓的宽

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包