mat opencv 修改roi_OpenCV中如何提取不规则ROI区域
點擊上方“計算機視覺life”,選擇“星標”
快速獲得最新干貨
什么是ROI
ROI是英文Region Of Interest的三個首字母縮寫,很多時候我們對圖像的分析就是對圖像特定ROI的分析與理解,對細胞與醫療圖像來說,ROI提取正確才可以進行后續的分析、測量、計算密度等,而且這些ROI區域往往不是矩形區域,一般都是不規則的多邊形區域,很多OpenCV初學者都不知道如何提取這些不規則的ROI區域。其實OpenCV中有個非常方便的API函數可以快速提取各種非正常的ROI區域。
提取ROI區域
在做這個之前,首先來了解一下什么圖像處理中的mask(遮罩),OpenCV中是如此定義Mask的:八位單通道的Mat對象,每個像素點值為零或者非零區域。當Mask對象添加到圖像區上時,只有非零的區域是可見,Mask中所有像素值為零與圖像重疊的區域就會不可見,也就是說Mask區域的形狀與大小直接決定了你看到最終圖像的大小與形狀。一個具體的示例如下:
可以看出,mask的作用是可以 幫助我們提取各種不規則的區域。OpenCV中完成上述步驟操作只需要簡單調用API函數?bitwise_and?即可。
于是另外一個問題也隨之而來,我們怎么生成這樣mask區域,答案是在OpenCV中有兩種方法搞定Mask區域生成。
方法一:
通過手動選擇,然后通過多邊形填充即可做到,代碼實現如下:
import?cv2?as?cvimport?numpy?as?np
src?=?cv.imread("D:/images/gc_test.png")
cv.imshow("input",?src)
h,?w,?c?=?src.shape
#?手工繪制ROI區域
mask?=?np.zeros((h,?w),?dtype=np.uint8)
x_data?=?np.array([124,?169,?208,?285,?307,?260,?175])
y_data?=?np.array([205,?124,?135,?173,?216,?311,?309])
pts?=?np.vstack((x_data,?y_data)).astype(np.int32).T
cv.fillPoly(mask,?[pts],?(255),?8,?0)
cv.imshow("mask",?mask)
#?根據mask,提取ROI區域
result?=?cv.bitwise_and(src,?src,?mask=mask)
cv.imshow("result",?result)
cv.waitKey(0)
運行效果如下:
方法二:
這個也是OpenCV新手最迷茫的地方,如何通過程序生成mask,其實真的很簡單。看代碼演示吧!
src?=?cv.imread("D:/images/gc_test.png")cv.imshow("input",?src)
#?生成mask區域
hsv?=?cv.cvtColor(src,?cv.COLOR_BGR2HSV)
mask?=?cv.inRange(hsv,?(156,?43,?46),?(180,?255,?255))
cv.imshow("mask",?mask)
#?提取ROI區域,根據mask
result?=?cv.bitwise_and(src,?src,?mask=mask)
cv.imshow("result",?result)
cv.waitKey(0)
效果如下:
主要是分為三步
提取輪廓ROI
生成Mask區域
提取指定輪廓
特別需要注意的是->其中生成Mask可以根據輪廓、二值化連通組件分析、inRange等處理方法得到。這里基于inRange方式得到mask區域,然后提取。
實際應用演示
最后看兩個在實際處理會用到mask實現ROI提取然后重新背景融合之后生成新圖像效果:
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、檢測分割識別、三維視覺、醫學影像、GAN、自動駕駛、計算攝影、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據研究方向邀請進入相關微信群。請勿在群內發送廣告,否則會請出群,謝謝理解~
投稿、合作也歡迎聯系:simiter@126.com
長按關注計算機視覺life
推薦閱讀
實戰 | 相機標定
實戰 | 圖像矯正技術
實戰 | Unity下ARKit與OpenCV的結晶
實戰 | 基于SegNet和U-Net的遙感圖像語義分割
實戰 | 文字定位與切割
實戰 | 源碼入門之Faster RCNN
實戰 | 自己實現掃描全能王
實戰 | 用OpenCV輕松生成微信國慶版頭像
實戰 | OpenCV 實現多張圖像拼接
實戰 | OpenCV相機標定與畸變校正
實戰 | 教你自動查找拍糊的圖
實戰 | 用 Python 給照片換色
我用MATLAB擼了一個2D LiDAR SLAM
實戰 | 哪個瞬間讓你突然覺得CV技術真有用?
干貨 | 史上最全 OpenCV 活體檢測教程
解決方案 | 如何用普通手機準確測量物體體積?
Mask-RCNN模型的實現自定義對象(無人機)檢測
scikit-image圖像處理入門
還在用肉眼找不同嗎?這個技術輕松搞定
OpenCV測量物體的尺寸技能 get~
超詳講解圖像拼接/全景圖原理和應用 | 附源碼
如何在實際中計劃和執行一個機器/深度學習項目
8個計算機視覺深度學習中常見的Bug
最新AI干貨,我在看??
總結
以上是生活随笔為你收集整理的mat opencv 修改roi_OpenCV中如何提取不规则ROI区域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net core3.0上传文件出现40
- 下一篇: centos打显卡驱动命令_CentOS