這篇文章主要介紹C++ OpenCV如何實(shí)現(xiàn)凸包檢測,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都石牌坊小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)站營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
凸包
凸包指如果在集合A內(nèi)連接任意兩個點(diǎn)的直線段都在A的內(nèi)部,則稱集合A是凸形的。簡單點(diǎn)理解,就是一個多邊型,沒有凹的地方。凸包(凸殼)能包含點(diǎn)集中所有的點(diǎn),凸包檢測常應(yīng)用在物體識別、手勢識別及邊界檢測等領(lǐng)域。
一個輪廓可以有無數(shù)個包圍它的外殼,而其中表面積最小的一個外殼,就是凸包。
相關(guān)API
OpenCV中提供了函數(shù)convexHull()用于對物體輪廓凸包進(jìn)行檢測,對形狀的凸包缺陷分析時使用
void convexHull( InputArray points, OutputArray hull, bool clockwise = false, bool returnPoints = true );
points:輸入二維點(diǎn)集(一般為輪廓點(diǎn)集),這些點(diǎn)集被存儲在容器vector或Mat中,在下面的源碼中,我是強(qiáng)制轉(zhuǎn)化為了Mat類型。
hull:凸包點(diǎn)集輸出。類型要么為整型向量,要么為點(diǎn)集向量,如果是整型向量,那么存儲的只是索引,索引的對象是輸入二維點(diǎn)集(如果不懂這句話的意思,看一遍下面給出的源碼就清楚了)。
clockwise:凸包方向的標(biāo)志位。如果是true,那么是基于順時針方向,如果是false,那么是基于反時針方向。
returnPoints: 表示返回點(diǎn)個數(shù),如果第二個參數(shù)是vector
代碼演示
實(shí)現(xiàn)步驟
圖像從RGB轉(zhuǎn)換為灰度圖
灰度圖轉(zhuǎn)為二值圖像
通過發(fā)現(xiàn)輪廓得到候選點(diǎn)
凸包API調(diào) 用
繪制顯示
新建一個項(xiàng)目opencv-0024,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法
凸包的處理代碼
下面是顯示效果
我們再換幾個圖像試試看看效果
以上是“C++ OpenCV如何實(shí)現(xiàn)凸包檢測”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!