日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

        编程问答

        mat opencv 修改roi_OpenCV中如何提取不规则ROI区域

        發布時間:2025/4/17 编程问答 33 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 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?cv
        import?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)

        效果如下:

        主要是分為三步

      1. 提取輪廓ROI

      2. 生成Mask區域

      3. 提取指定輪廓

      4. 特別需要注意的是->其中生成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区域的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。