国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

我們如何定義ROI?

新機器視覺 ? 來源:小白學視覺 ? 作者:努比 ? 2022-06-09 11:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OpenCV是一個巨大的開源庫,廣泛用于計算機視覺,人工智能和圖像處理領域。它在現實世界中的典型應用是人臉識別,物體檢測,人類活動識別,物體跟蹤等。

現在,假設我們只需要從整個輸入幀中檢測到一個對象。因此,代替處理整個框架,如果可以在框架中定義一個子區域并將其視為要應用處理的新框架,該怎么辦。我們要完成一下三個步驟:

?定義興趣區

?在ROI中檢測輪廓

?閾值檢測輪廓輪廓線

什么是ROI?

簡而言之,我們感興趣的對象所在的幀內的子區域稱為感興趣區域(ROI)。

我們如何定義ROI?

在輸入幀中定義ROI的過程稱為ROI分割。

在“ ROI細分”中,(此處)我們選擇框架中的特定區域,并以矩形方法提供其尺寸,以便它將在框架上繪制矩形的ROI。

1934a0e2-e731-11ec-ba43-dac502259ad0.png

(輸出)藍色矩形覆蓋的區域是我們的投資回報率

現在,如果您也想綁定感興趣的對象,那么我們可以通過在ROI中找到輪廓來實現。

什么是輪廓?

輪廓線是表示或說是限制對象形狀的輪廓。

如何在框架中找到輪廓?

對我而言,在將ROI框架設為閾值后,找到輪廓效果最佳。因此,要找到輪廓,手上的問題是-

什么是閾值?

閾值不過是圖像分割的一種簡單形式。這是將灰度或rgb圖像轉換為二進制圖像的過程。例如

198779c0-e731-11ec-ba43-dac502259ad0.png

(這是RGB幀)

19acae20-e731-11ec-ba43-dac502259ad0.png

(這是二進制閾值幀)

因此,在對rgb幀進行閾值處理后,程序很容易找到輪廓,因為由于ROI中感興趣對象的顏色將是黑色(在簡單的二進制脫粒中)或白色(在如上所述的反向二進制脫粒中),因此分割(將背景與前景即我們的對象分開)將很容易完成。

在對框架進行閾值處理并檢測到輪廓之后,我們應用凸包技術對圍繞對象點的緊密擬合凸邊界進行設置。實施此步驟后,框架應如下所示-

19ce95f8-e731-11ec-ba43-dac502259ad0.png

我們可以做的另一件事是,我們可以遮蓋ROI以僅顯示被檢測到的輪廓本身覆蓋的對象。再次-

什么是圖像MASK?

圖像MASK是隱藏圖像的某些部分并顯示某些部分的過程。這是圖像編輯的非破壞性過程。在大多數情況下,它使您可以在以后根據需要調整和調整遮罩。通常,它是一種有效且更具創意的圖像處理方式。

因此,基本上在這里我們將掩蓋ROI的背景。為此,首先我們將修復ROI的背景。然后,在固定背景之后,我們將從框架中減去背景,并用wewant背景(這里是一個簡單的黑色框架)替換它。

實施上述技術,我們應該得到如下輸出:

19f5abd4-e731-11ec-ba43-dac502259ad0.png

(背景被遮罩以僅捕獲對象)

這是所說明技術的理想實現的完整代碼。


import cv2import numpy as npimport copyimport math
x=0.5  # start point/total widthy=0.8  # start point/total widththreshold = 60  # BINARY thresholdblurValue = 7  # GaussianBlur parameterbgSubThreshold = 50learningRate = 0
# variablesisBgCaptured = 0   # whether the background captured
def removeBG(frame): #Subtracting the background    fgmask = bgModel.apply(frame,learningRate=learningRate)
    kernel = np.ones((3, 3), np.uint8)    fgmask = cv2.erode(fgmask, kernel, iterations=1)    res = cv2.bitwise_and(frame, frame, mask=fgmask)    return res
# Cameracamera = cv2.VideoCapture(0)camera.set(10,200)


while camera.isOpened():    ret, frame = camera.read()    frame = cv2.bilateralFilter(frame, 5, 50, 100)  # smoothening filter    frame = cv2.flip(frame, 1)  # flip the frame horizontally    cv2.rectangle(frame, (int(x * frame.shape[1]), 0),                 (frame.shape[1], int(y * frame.shape[0])), (255, 0, 0), 2) #drawing ROI    cv2.imshow('original', frame)
    #  Main operation    if isBgCaptured == 1:  # this part wont run until background captured        img = removeBG(frame)        img = img[0:int(y * frame.shape[0]),                    int(x * frame.shape[1]):frame.shape[1]]  # clip the ROI        cv2.imshow('mask', img)
        # convert the image into binary image        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)        blur = cv2.GaussianBlur(gray, (blurValue, blurValue), 0)        cv2.imshow('blur', blur)        ret, thresh = cv2.threshold(blur, threshold, 255, cv2.THRESH_BINARY) #thresholding the frame        cv2.imshow('ori', thresh)

        # get the coutours        thresh1 = copy.deepcopy(thresh)        contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #detecting contours        length = len(contours)        maxArea = -1        if length > 0:            for i in range(length):  # find the biggest contour (according to area)                temp = contours[i]                area = cv2.contourArea(temp)                if area > maxArea:                    maxArea = area                    ci = i
            res = contours[ci]            hull = cv2.convexHull(res) #applying convex hull technique            drawing = np.zeros(img.shape, np.uint8)            cv2.drawContours(drawing, [res], 0, (0, 255, 0), 2) #drawing contours             cv2.drawContours(drawing, [hull], 0, (0, 0, 255), 3) #drawing convex hull            cv2.imshow('output', drawing)
    # Keyboard OP    k = cv2.waitKey(10)    if k == 27:          camera.release()        cv2.destroyAllWindows()        break    elif k == ord('b'):  # press 'b' to capture the background        bgModel = cv2.createBackgroundSubtractorMOG2(0, bgSubThreshold)        isBgCaptured = 1        print( 'Background Captured')    elif k == ord('r'):  # press 'r' to reset the background        bgModel = None        isBgCaptured = 0print('ResetBackGround')

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 人臉識別
    +關注

    關注

    77

    文章

    4127

    瀏覽量

    88459
  • OpenCV
    +關注

    關注

    33

    文章

    652

    瀏覽量

    44795

原文標題:基于OpenCV的區域分割、輪廓檢測和閾值處理

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    工廠人員定位軟件管理系統從部署實施流程、ROI分析到風險與避坑要點詳解(二)

    本文詳解工廠人員定位系統部署全流程,涵蓋勘測、POC驗證、分階段實施及驗收培訓;結合ROI分析與風險規避要點,助力企業實現安全、高效、合規的人員管理智能化升級。
    的頭像 發表于 01-14 17:33 ?115次閱讀

    工廠人員定位工卡從部署實施、典型應用、成本與ROI分析等詳解(二)

    本文詳解工廠人員定位工卡的部署實施、典型應用與成本ROI。涵蓋UWB/藍牙/RFID融合技術的安裝流程、化工等高危場景應用案例,實現精準定位、電子圍欄報警、快速救援,提升安全與管理效率,并提供硬件、軟件及文檔交付清單,助力企業高效落地。
    的頭像 發表于 12-24 16:27 ?1057次閱讀

    結構體聲明與定義

    符號整數表示 } 這樣,我們就相當于描繪好了一個框架,以后要用的話直接定義一個這種類型的變量就好了。 2、定義 我們剛剛申請了一個名叫Info的結構體類型,那么理論上
    發表于 12-11 07:52

    【嘉楠堪智K230開發板試用體驗】高校競賽-2025電賽-E題

    (x, y, w, h, color=(255, 0, 0), thickness=2) ? # 縮小 ROI,避免貼邊 margin = 8 # 根據情況調 roi_x = max(x
    發表于 08-21 15:32

    找正方形的代碼我把roi刪除過后能識別到正方形,加上roi后就識別不出來,為什么?

    找正方形的代碼我把roi刪除過后能識別到正方形,加上roi后就識別不出來,更改roi為更大更穩定的范圍也識別不到,麻煩解答一下,謝謝
    發表于 08-14 06:23

    程序總是報錯Out of fast frame buffer stack memory,怎么解決?

    KeyButtonWIDTH, HEIGHT = 800, 480# 保持原分辨率key = KeyButton()roi1 = (200, 120, 450, 250)# 保持原ROIthreshold
    發表于 08-13 06:40

    【GM-3568JHF開發板免費體驗】OpenCV 視頻目標跟蹤 ( CamShift)

    , y, width, height) x, y, w, h = 350, 250, 300, 300 track_window = (x, y, w, h) # 設置 ROI (Region
    發表于 08-09 13:19

    抖音電商API粉絲行為分析,精準營銷ROI翻番!

    回報率(ROI)。本文將一步步解析如何通過API驅動的粉絲行為分析,讓您的ROI輕松翻倍。 第一步:理解抖音電商API的核心功能 抖音電商API允許商家以編程方式訪問平臺數據,包括粉絲的互動、購買和偏好信息。關鍵數據點包括: 粉絲活躍
    的頭像 發表于 08-01 14:39 ?1044次閱讀
    抖音電商API粉絲行為分析,精準營銷<b class='flag-5'>ROI</b>翻番!

    負載開關IC的基本定義和使用好處

    歡迎來到芝識課堂!電源管理作為電子系統正常運行的關鍵環節,其復雜性與重要性日益凸顯。從今天起,我們將為大家介紹一種能夠簡化電源管理、顯著提升系統穩定性的神奇器件——負載開關IC。接下來,就讓我們一同
    的頭像 發表于 07-31 09:19 ?2099次閱讀
    負載開關IC的基本<b class='flag-5'>定義</b>和使用好處

    定義IO初始化結構體

    由上述IOPORT相關功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據情況配置它們。因此我們定義一個IOPORT初始化的結構體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此
    的頭像 發表于 07-16 16:26 ?1410次閱讀

    HarmonyOS應用自定義鍵盤解決方案

    定義鍵盤是一種替換系統默認鍵盤的解決方案,可實現鍵盤個性化交互。允許用戶結合業務需求與操作習慣,對按鍵布局進行可視化重構、設置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護層面,自定義鍵盤可以
    的頭像 發表于 06-05 14:19 ?2400次閱讀

    低壓差穩壓器的基本定義和特性

    歡迎來到芝識課堂!從本文開始,我們要為您介紹在電源電路設計中非常重要,還經常露面的“大明星”——低壓差穩壓器。我們會介紹低壓差穩壓器的基本定義、內部原理、工作方式以及它們的電氣特性。首先,我們
    的頭像 發表于 06-05 11:46 ?1911次閱讀
    低壓差穩壓器的基本<b class='flag-5'>定義</b>和特性

    基于LockAI視覺識別模塊:C++使用圖像的統計信息

    在圖像處理中,統計信息可以幫助我們了解圖像的特性,例如區域內的像素分布、顏色轉換以及特定區域的分析。本文將介紹基于LockAI視覺識別模塊如何提取興趣區域(ROI)、轉換顏色通道、計算均值和標準差
    發表于 05-08 10:31

    邊緣設備的奇妙之旅:在小凌派-RK2206上部署AI模型來實現視覺巡線

    ;lt; std::endl; // 定義ROI區域 cv::Rect roi_rect(100, 400, 440, 80); while (true) { cv::Mat
    發表于 03-31 10:58

    線束導線長度的定義有哪些?重要嗎?

    關于線束導向長度的定義定義了適當的、準確的導線長度,可用于線束制造。
    的頭像 發表于 03-27 11:46 ?1268次閱讀