好久没有写博客了,今天有空写一下自己做的一个小实验,有兴趣的伙伴一起验证一下。刚刚开始学习计算机视觉,OpenCV没有基础,刚刚接触这门语言,就做几个小实验练习一下。

好了,废话不多说,进入正题。吾理小子估计圆周率的值是通过内接圆完成的,首先简述一下原理。

如上图所示,圆内接于正方形。设圆的半径为R,易得圆的面积和正方形的面积如下:

由此可得:

有上式可知,如果知道圆的面积和正方形的面积,就可以求出圆周率Pi的值。

此时,我们假设有一个未知边长的正方形及其内接圆。我们可以通过向正方形内随机撒入多个噪点,由噪点的个数来近似正方形的面积,用落在圆内的噪点个数来等效圆的面积,由此就可以估算圆周率Pi的值了。

接下来,使用OpenCV来实现上述过程。我将源码贴在文末,供各位小伙伴参考。

下面先给出程序的运行过程,以及估计结果。

上面三幅图分别是估计过程中的三个图,最后一幅图是估计结果3.13908,与真实值3.1415还是比较接近的。可以通过进一步增大正方形的边长来提高估计精度。最后贴上源码。


#include <iostream>
#include <opencv2\opencv.hpp>using namespace std;
using namespace cv;int main()
{const int side = 600;        //定义正方形边长const int npixels = 300000;  //定义随机点个数int i, j;Mat s1 = Mat::zeros(side,side,CV_8UC1);Mat s2 = s1.clone();         //图像s1,s2均为0值,即纯黑circle(s1, Point(side / 2, side / 2), side / 2, 255, -1);//在s1正方形图像中开辟一个内接圆imshow("s1", s1); //显示s1图像for (int k = 0; k < npixels; k++)  //产生随机数,撒在图像s2中{i = rand() % side;j = rand() % side;s2.at<uchar>(i, j) = 255;}Mat r;    //定义输出图像rbitwise_and(s1,s2,r); //图像s1与s2进行与运算imshow("s2", s2);     //显示图像s2imshow("r", r);       //显示图像rint Acircle = countNonZero(r);   //统计图像r中的非零点个数int Square = countNonZero(s2);   //统计图像s2中的非零点个数float pi = 4 * (float)Acircle / Square;  //估计圆周率的值cout << "PI的值:" << pi << endl;  //输出圆周率的值waitKey(0);return 0;}

基于OpenCV的圆周率PI值的估计相关推荐

  1. [Julia语言]使用Chudnovsky 算法快速计算圆周率 Pi (π) 值

    测试用的电脑是一台10年老电脑,CPU型号:E3 1230V2,3.3GHZ,4核8线程,8GB内存. 用下面的Julia程序,计算1万位的Pi值,耗时为0.26秒. 作为比较,用Julia实现的另一 ...

  2. [JuliaDelphi]快速计算圆周率 Pi (π) 值

    算法参考自: 计算圆周率Pi(π)值,精确到小数点后10000位 - 圆周率10000位 - C++ 爱好者 分别以Julia 1.72和Delphi 10.3写的算法如下面所示.在一台10年的老电脑 ...

  3. OpenCV进阶(6)基于OpenCV的深度学习人体姿态估计之多人篇

    在之前的文章中,我们使用OpenPose模型对一个人进行人体姿势估计.在这篇文章中,我们将讨论如何进行多人姿势估计. 当一张照片中有多个人时,姿态估计会产生多个独立的关键点.我们需要找出哪组关键点属于 ...

  4. c语言计算pi后1000位,计算圆周率 Pi (π)值, 精确到小数点后 10000 位

    大家都知道π=3.1415926--无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题.现在有了电脑, 这个问题就简单了. 电脑可以利用级数计算出很多高精度的值, 有关级数的问题请 ...

  5. 计算圆周率 Pi (π)值

    大家都知道π=3.1415926--无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题.现在有了电脑, 这个问题就简单了. 电脑可以利用级数计算出很多高精度的值, 有关级数的问题请 ...

  6. python 圆周率代码_基于Python计算圆周率pi代码实例

    一 计算公式: 二 实现代码 (1) import math from tqdm import tqdm import time total,s,n,t=0.0,1,1.0,1.0 while(mat ...

  7. 查看圆周率 Pi值 Pi的前百位 Pi的前百万位

    早上忽然看到PI的热搜,就想着看看PI的前一百位甚至更多位是多少,用spark-sql.presto和doris的pi()函数尝试了下,都只给出十几位,使用hadoop提供的example.jar能算 ...

  8. C语言程序设计入门08——初识格式化输出1:格式化输出PI值

    格式化输出函数 printf() 作为 C 程序的标准格式化输出函数,printf()的函数声明包含在头文件 <stdio.h> 中,函数的一般形式为:  printf ( <待打印 ...

  9. 蒙特卡洛方法的使用:计算pi值与积分计算

    参考: https://blog.csdn.net/Cuixinyang19_/article/details/79888981 # -*- coding: utf-8 -*- "" ...

最新文章

  1. get_live2d获取不到500_有人手机收不到验证码?警方打掉一“薅羊毛”产业链,全国已有570多万台手机被控制……...
  2. timer控件的使用
  3. JAVA免费https,Java与HTTPS
  4. 【大数据-第二期】java基础第五天作业
  5. Linux入门之inode解析及管道重定向
  6. Vue-学生管理功能实例
  7. 说不尽的 π —— π 的近似计算
  8. python程序写诗_pytorch下使用LSTM神经网络写诗实例
  9. jQuery~函数封装记1
  10. SurfaceView + MediaPlayer 实现列表循环播放视频
  11. cad 切图_CAD怎么切图?
  12. 基于Matlab的数字水印设计
  13. 通信中的MGF(矩生成函数)
  14. win10下CUDA和CUDNN的安装(超详细)!亲测有效!
  15. Learning Photoshop Elements 15 Photoshop Elements 15教程 Lynda课程中文字幕
  16. AutoML- NNI
  17. Win7下SQLite安装配置与使用方法详解
  18. 3-SII--Android的SD卡文件读写
  19. [解题报告]11689 - Soda Surpler
  20. JSP入门教程(1)

热门文章

  1. Windows10 中的字母映射表
  2. 华为1+X认证网络系统管理与运维中级实验
  3. Android7.0 PackageManagerService (2) PKMS构造函数的主要工作
  4. (H5)canvas实现裁剪图片和马赛克功能,以及又拍云上传图片
  5. 【CSDN英雄会】囯炬CEO张代浩:做写架构的人,做制定游戏规则的人
  6. ADuC7026简单开发过程
  7. 【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本
  8. 慢扫描电视 SSTV
  9. 牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数。若用差商代替导数,可得下列弦截法
  10. Tensorflow faster RCNN目标检测车牌