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