3個月前,由于一個應用需要互動式辨別ROI,順便總結了一下判斷點和多邊形關系的不同方法。形成了以下4篇blog
判斷點與多邊形的關系(1):向量積法
判斷點與多邊形的關系(2):面積法
判斷點與多邊形的關系(3):角度和法
判斷點與多邊形的關系(4):射線法
其實,如果隻是為了這樣的應用,可以直接調用opencv函數實作以上功能。
首先簡要介紹一下opencv用到的函數(僅是簡單介紹,具體功能和調用方法可檢視opencv文檔)。
polylines–根據圖檔上點的序列,繪制多邊形
fillPoly–填充多邊形區域
根據以上描述可知,用polylines可繪制一個多邊形,用fillPloy生成mask,即可輕松實作此功能。可實際上,這裡有一個坑。如圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9s2VZ9mTHFmNWJDTwYVbiVHNHpleO1GTulzRilWO5x0LcRHelR3LcJzLctmch1mclRXY39jN1UTO1QjMyIDOxMDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
以上分别是繪制的過程,ROI提取圖像結果和mask檔案。可以看出,如果框選區域有重疊,則重疊次數為偶數的區域則會形成空洞。使用者在點選時,很難對其點選行為進行限定,如果奠定,使用者體驗也不會好。是以,就要通過以下函數進行處理:
findContours–查找邊緣,這裡可以查找最外側輪廓
drawContours–繪制輪廓,可通過此函數填充輪廓
這樣處理以後,效果就是這樣
可見重疊的部分都填充上了。
通過滑鼠進行互動設定ROI區域的完整代碼可在一下位址下載下傳:
CSDN:https://download.csdn.net/download/ezhchai/10294189
GitHub:https://github.com/ezhchai/drawRegion
這篇部落格算是對這個應用的一個總結,不知是不是大結局,能否再挖掘出一些有意思的東西~