天天看點

判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼

3個月前,由于一個應用需要互動式辨別ROI,順便總結了一下判斷點和多邊形關系的不同方法。形成了以下4篇blog

判斷點與多邊形的關系(1):向量積法

判斷點與多邊形的關系(2):面積法

判斷點與多邊形的關系(3):角度和法

判斷點與多邊形的關系(4):射線法

其實,如果隻是為了這樣的應用,可以直接調用opencv函數實作以上功能。

首先簡要介紹一下opencv用到的函數(僅是簡單介紹,具體功能和調用方法可檢視opencv文檔)。

polylines–根據圖檔上點的序列,繪制多邊形

fillPoly–填充多邊形區域

根據以上描述可知,用polylines可繪制一個多邊形,用fillPloy生成mask,即可輕松實作此功能。可實際上,這裡有一個坑。如圖:

判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼
判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼
判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼

以上分别是繪制的過程,ROI提取圖像結果和mask檔案。可以看出,如果框選區域有重疊,則重疊次數為偶數的區域則會形成空洞。使用者在點選時,很難對其點選行為進行限定,如果奠定,使用者體驗也不會好。是以,就要通過以下函數進行處理:

findContours–查找邊緣,這裡可以查找最外側輪廓

drawContours–繪制輪廓,可通過此函數填充輪廓

這樣處理以後,效果就是這樣

判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼
判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼
判斷點與多邊形的關系(5):OpenCV互動式繪制圖像ROI應用代碼

可見重疊的部分都填充上了。

通過滑鼠進行互動設定ROI區域的完整代碼可在一下位址下載下傳:

CSDN:https://download.csdn.net/download/ezhchai/10294189

GitHub:https://github.com/ezhchai/drawRegion

這篇部落格算是對這個應用的一個總結,不知是不是大結局,能否再挖掘出一些有意思的東西~