基於OpenCV的圓周率PI值的估計

2021-08-28 17:39:57 字數 1396 閱讀 2253

好久沒有寫部落格了,今天有空寫一下自己做的乙個小實驗,有興趣的夥伴一起驗證一下。剛剛開始學習計算機視覺,opencv沒有基礎,剛剛接觸這門語言,就做幾個小實驗練習一下。

好了,廢話不多說,進入正題。吾理小子估計圓周率的值是通過內接圓完成的,首先簡述一下原理。

如上圖所示,圓內接於正方形。設圓的半徑為r,易得圓的面積和正方形的面積如下:

由此可得:

有上式可知,如果知道圓的面積和正方形的面積,就可以求出圓周率pi的值。

此時,我們假設有乙個未知邊長的正方形及其內接圓。我們可以通過向正方形內隨機撒入多個噪點,由噪點的個數來近似正方形的面積,用落在圓內的噪點個數來等效圓的面積,由此就可以估算圓周率pi的值了。

接下來,使用opencv來實現上述過程。我將原始碼貼在文末,供各位小夥伴參考。

下面先給出程式的執行過程,以及估計結果。

上面三幅圖分別是估計過程中的三個圖,最後一幅圖是估計結果3.13908,與真實值3.1415還是比較接近的。可以通過進一步增大正方形的邊長來提高估計精度。最後貼上原始碼。

#include #include using namespace std;

using namespace cv;

int main()

mat r; //定義輸出影象r

bitwise_and(s1,s2,r); //影象s1與s2進行與運算

imshow("s2", s2); //顯示影象s2

imshow("r", r); //顯示影象r

int acircle = countnonzero(r); //統計影象r中的非零點個數

int square = countnonzero(s2); //統計影象s2中的非零點個數

float pi = 4 * (float)acircle / square; //估計圓周率的值

cout << "pi的值:" << pi << endl; //輸出圓周率的值

waitkey(0);

return 0;

}

求圓周率pi的怪異程式 祖沖之圓周率演算法絕技之迷

據說華羅庚曾講過乙個故事,說 有個教書先生喜歡喝酒,一天,他叫學生背圓周率,自己卻提壺酒到山上廟裡找老和尚喝酒去了。有個聰明的學生把圓周率編了個 打油詩 山巔一寺一壺酒,爾樂苦煞吾,把酒吃 酒殺爾殺不死,樂爾樂 其實是 3.1415926535897932384626 的諧音。先生一回來,學生居然背...

(C語言)圓周率 PI演算法

應用第三個級數進行計算,級數具體內容請參考高等數學,e mail chisir2000 163.com 輸出結果 pi 3.1415926535898 include int main memset x,0,arrsize memset z,0,arrsize x 1 2 z 1 2 while r...

用python計算圓周率PI

向區域內隨即撒點 當點的數目足夠多時,落在圓的點數目與在正方形點數目成正比 即圓的面積和正方形的面積成正比 可以得出計算圓周率的演算法 darts 100000000 hits 0.0 clock fori inrange 1,darts 1 x,y random random dist sqrt ...