您好,登錄后才能下訂單哦!
這篇文章主要介紹C++ OpenCV如何實現凸包檢測,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
凸包
凸包指如果在集合A內連接任意兩個點的直線段都在A的內部,則稱集合A是凸形的。簡單點理解,就是一個多邊型,沒有凹的地方。凸包(凸殼)能包含點集中所有的點,凸包檢測常應用在物體識別、手勢識別及邊界檢測等領域。
一個輪廓可以有無數個包圍它的外殼,而其中表面積最小的一個外殼,就是凸包。
相關API
OpenCV中提供了函數convexHull()用于對物體輪廓凸包進行檢測,對形狀的凸包缺陷分析時使用
void convexHull( InputArray points, OutputArray hull, bool clockwise = false, bool returnPoints = true );
points:輸入二維點集(一般為輪廓點集),這些點集被存儲在容器vector或Mat中,在下面的源碼中,我是強制轉化為了Mat類型。
hull:凸包點集輸出。類型要么為整型向量,要么為點集向量,如果是整型向量,那么存儲的只是索引,索引的對象是輸入二維點集(如果不懂這句話的意思,看一遍下面給出的源碼就清楚了)。
clockwise:凸包方向的標志位。如果是true,那么是基于順時針方向,如果是false,那么是基于反時針方向。
returnPoints: 表示返回點個數,如果第二個參數是vector<Point>則自動忽略
代碼演示
實現步驟
圖像從RGB轉換為灰度圖
灰度圖轉為二值圖像
通過發現輪廓得到候選點
凸包API調 用
繪制顯示
新建一個項目opencv-0024,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法
凸包的處理代碼
下面是顯示效果
我們再換幾個圖像試試看看效果
以上是“C++ OpenCV如何實現凸包檢測”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。