問題的提出:
所謂內切圓,是指「與
多邊形各邊都
相切的圓「。我們這裡需要找的是所謂」內接圓「,可以簡單認為是」圓點在輪廓中,到輪廓中所有點的距離一樣的影象「。在這所有的」內接圓「中,尋找半徑最大的哪乙個。
這個問題已經廣泛討論了,比如
這樣的影象,尋找輪廓的最大內接圓。
解決方法:
#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...