如何尋找已知輪廓的最大內接圓

2021-09-20 00:17:59 字數 3141 閱讀 6354

問題的提出:

所謂內切圓,是指「與

多邊形各邊都

相切的圓「。我們這裡需要找的是所謂」內接圓「,可以簡單認為是」圓點在輪廓中,到輪廓中所有點的距離一樣的影象「。在這所有的」內接圓「中,尋找半徑最大的哪乙個。

這個問題已經廣泛討論了,比如

這樣的影象,尋找輪廓的最大內接圓。

解決方法:

#include"stdafx.h"

#include

usingnamespacestd;

usingnamespacecv;

vp findbigestcontour(mat src)

}returncontours[imax];

}intmain(intargc,char* ar**)}}

//繪製結果

circle(src,center,maxdist,scalar(0,0,255));

imshow("dst",src);

waitkey();

}

其中pointpolygontest

測試點是否在多邊形中

doublecvpointpolygontest(constcvarr* contour, cvpoint2d32f pt,intmeasure_dist );

contour 輸入輪廓.

pt 針對輪廓需要測試的點。

measure_dist 如果非0,函式將估算點到輪廓最近邊的距離。

函式cvpointpolygontest 決定測試點是否在輪廓內,輪廓外,還是輪廓的邊上(或者共邊的交點上),它的返回值是正負零,相對應的,當measure_dist=

0時,返回值是1, -

1,0, 同樣當 measure_dist≠0 ,它是返回乙個從點到最近的邊的帶符號距離。

結果:

優化的思路:

這裡對圓心的遍歷,是遍歷了所有的影象上面的點。然而根據」內接圓心一定在輪廓內部「這個先驗知識,可以縮小迴圈範圍,提高演算法效率。

2023年7月27日22:01:01 對opencv的官方例子進行修改,並提交github

} 來自為知筆記(wiz)

目前方向:影象拼接融合、影象識別 ****:[email protected]

opencv的實用研究 分析輪廓並尋找邊界點

opencv的實用研究 分析輪廓並尋找邊界點 輪廓是影象處理中非常常見的。對現實中的影象進行取樣 色彩變化 灰度變化之後,能夠處理得到的是 輪廓 它直接地反應你了需要分析物件的邊界特徵。而對輪廓的分析,實際上也就是對原影象特徵的分析。在opencv中,已經實現了基礎的輪廓演算法,但是相比較於比如ha...

尋找最大的K個數

方法一 改進的快速排序 分割槽時,根據數p將陣列分為兩部分,設大於p的數個數為a,小於p的數的個數為b。如果,a k,則從這a個數取最大的k個數,若a時間複雜度是o nlogk include includevoid swap float a,float b int fun float n,int ...

尋找最大的K個數

程式設計之美有一道考察多種排序的題目,題目如下 有乙個長度為n的無序陣列,假定其中的每乙個元素都各不相等,求其中最大的k個數。作者對於此題目結合各種排序演算法給出了五種解法思路。解法一 使用快速排序或堆排序對它們元素進行排序,整個排序的時間複雜度為o n lo g2n 然後取出前k個,時間複雜度為o...