OpenCV曲线拟合与圆拟合

使用OpenCV做图像处理与分析的时候,经常会遇到需要进行曲线拟合与圆拟合的场景,很多OpenCV开发者对此却是一筹莫展,其实OpenCV中是有现成的函数来实现圆拟合与直线拟合的,而且还会告诉你拟合的圆的半径是多少,简直是超级方便,另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,形成完整的曲线,这个车道线检测,轮廓曲线拟合等场景下特别有用。下面就通过两个简单的例子来分别学习一下曲线拟合与圆拟合的应用。

一:曲线拟合与应用

基于Numpy包的polyfit函数实现,其支持的三个参数分别是x点集合、y点集合,以及多项式的幂次。得到多项式方程以后,就可以完整拟合曲线,图中有如下四个点:

调用polyfit生成的二阶多项式如下:

拟合结果如下:

使用三阶多项式拟合,调用polyfit生成的多项式方程如下:

生成的拟合曲线如下:

使用polyfit进行曲线拟合时候需要注意的是,多项式的幂次最大是数据点数目N - 1幂次多项式,比如有4个点,最多生成3阶多项式拟合。上述演示的完整代码实现如下:

def circle_fitness_demo():

image = np.zeros((400, 400, 3), dtype=np.uint8)

x = np.array([30, 50, 100, 120])

y = np.array([100, 150, 240, 200])

for i in range(len(x)):

cv.circle(image, (x[i], y[i]), 3, (255, 0, 0), -1, 8, 0)

cv.imwrite("D:/curve.png", image)

poly = np.poly1d(np.polyfit(x, y, 3))

print(poly)

for t in range(30, 250, 1):

y_ = np.int(poly(t))

cv.circle(image, (t, y_), 1, (0, 0, 255), 1, 8, 0)

cv.imshow("fit curve", image)

cv.imwrite("D:/fitcurve.png", image)

二:圆拟合与应用

圆的拟合是基于轮廓发现的结果,对发现的近似圆的轮廓,通过圆拟合可以得到比较好的显示效果,轮廓发现与拟合的API分别为findContours与fitEllipse,

有图像如下:

使用轮廓发现与圆拟合处理结果如下:

红色表示拟合的圆,蓝色是圆的中心位置

上述完整的演示代码如下:

def circle_fitness_demo():

src = cv.imread("D:/javaopencv/c2.png")

cv.imshow("input", src)

src = cv.GaussianBlur(src, (3, 3), 0)

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)

cv.imshow("binary", binary)

image, contours, hierachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):

rrt = cv.fitEllipse(contours[i])

cv.ellipse(src, rrt, (0, 0, 255), 2, cv.LINE_AA)

x, y = rrt[0]

cv.circle(src, (np.int(x), np.int(y)), 4, (255, 0, 0), -1, 8, 0)

cv.imshow("fit circle", src)

cv.imwrite("D:/fitcircle.png", src)

吾心信其可行,则移山填海之难,终有成功之日;

吾心信其不可行,则反掌折枝之易,亦无收效之期也

python 拟合圆_OpenCV曲线拟合与圆拟合相关推荐

  1. 如何用python画圆形的代码-Python实现的圆形绘制(画圆)示例

    本文实例讲述了Python实现的圆形绘制.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 import numpy as np import ma ...

  2. Python:OpenCV4识别一个蓝色的圆并估算到相机的距离

    Python:OpenCV4识别一个蓝色的圆并估算到相机的距离 参考:用 Python 和 OpenCV 来测量相机到目标的距离 这位博主对实现过程以及思路解释的很清楚,这里记录下自己的实现过程以及自 ...

  3. python圆的半径计算圆的周长列表_用python计算圆的周长

    Python编程题:输入圆半径,输出圆面积 R=eval(input("请输入圆的半径:")) pi=3.14 S=pi*R**2 print("圆的面积是:{}&quo ...

  4. (基础篇)用python实现输入圆半径,输出圆的周长和面积

    话不多说,超基础的用python实现输入圆半径,输出圆的周长和面积,适合初学者!!! [开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Pytho ...

  5. Python 通过创建MyMath类计算圆的周长面积球的表面积体积

    Python 通过创建MyMath类计算圆的周长面积球的表面积体积 import math class MyMath:def __init__(self,r,):self.r=rdef C(self) ...

  6. matlab如何做正交多项式曲线拟合,matlab正交多项式拟合

    在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列; 陈章 位; 胡海清 4.在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列...... 变换后 ...

  7. python输入半径求圆的面积、保留三位小数_编写程序,输入圆的半径,求该圆的面积与周长(保留三位小数)。 /* 程序功能:输入圆的半径,计算圆的面积与周长*/_学小易找答案...

    [编程题]从字符串中删除指定的字符.同一字母的大小写按不同字符处理. 例如:若程序执行时,输入字符串为: turbo c and Borland c++ ,从键盘上输入字符: n ,则输出后变为: t ...

  8. python怎么求圆柱表面积半径和高由键盘输入_从键盘上输入圆的半径,计算圆的周长和面积(使用符号常量)_学小易找答案...

    [单选题]Randal Ice needs a loan to purchase pet food and other pet supplies for his local pet store ove ...

  9. python circle函数如何画圆_Python Matplotlib画圆

    同时需要了解Numpy和Matplotlib相关知识. 看代码吧,仔细了解清楚每句代码,每个函数. # -*- coding:utf-8 -*- #! python3 import numpy as ...

  10. 动图之一个圆绕另一个圆转动

    已知圆1与圆2,圆2不动,圆1绕圆2转一圈,圆1自转多少圈? 答:圆1的圆心走了 2 π ( r 1 + r 2 ) 2\pi(r_1+r_2) 2π(r1​+r2​),圆1自转了的路程也是 2 π ...

最新文章

  1. python设置环境路径_window10配置python虚拟环境的路径
  2. 基于RDP开源许可rdesktop基本介绍
  3. mysql创建库和表确保utf8_mysql创建utf8数据库
  4. 高段位产品经理必须掌握的商业模式分析该怎么做?
  5. 爬取LeetCode题目——如何发送GraphQL Query获取数据
  6. shell脚本判断上一个命令是否执行成功
  7. 创建定制的ASP.NET AJAX非可视化客户端组件
  8. matlab中double 和single数据类型的差别
  9. 北大主场夺金ACM-ICPC全球总决赛,总教练罗国杰分享背后“秘笈”
  10. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
  11. 区块链:数字广告假量的“终结者”
  12. java 级数_编写一个Java程序实现级数运算。
  13. 大部分人都容易焦虑,那么应该如何对待焦虑呢?
  14. DestroyWindow无法销毁的问题
  15. 识别图中文字python_python识别图片中文字的方法
  16. 流程设计建模方法:流程的需求梳理之活动级别梳理
  17. 车载以太网工具链,你了解多少?
  18. web前端期末大作业网页设计与制作 ——汉口我的家乡旅游景点 5页HTML+CSS+JavaScript
  19. 如何批量将图片尺寸改成一样大?
  20. Ogre3D 1.8.1 Android移植

热门文章

  1. 创客集结号:3D打印如何与中小学教育有机结合?
  2. 操作系统复习笔记--第十一、十二章 文件系统的实现与大容量存储结构
  3. 2021-02-14金蝶KIS旗舰版从采购订单下推外购入库单使用说明,金蝶盘点机PDA仓库条码管理
  4. 私有链和联盟链的机会与挑战
  5. 利用单片机做手机连点器(附别踩白块自动点击程序)
  6. Kylo调研总结(一)
  7. 51单片机步进电机c语言程序,51单片机的步进电机c语言驱动程序
  8. 设置谷歌浏览器深色黑色背景
  9. UI自动化测试实战--- app订单、web发货(9)
  10. 《植物大战僵尸》游戏数据修改