国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        一文教你使用OpenCV+CVzone進行實時背景替換

        2021-08-25 08:56
        磐創AI
        關注

        介紹OpenCV是一個開源計算機視覺庫,可提供播放不同圖像和視頻流的權限,還有助于端到端項目,如對象檢測、人臉檢測、對象跟蹤等。CVzone是一個計算機視覺包,可以讓我們輕松運行像人臉檢測、手部跟蹤、姿勢估計等,以及圖像處理和其他 AI 功能。它的核心是使用 OpenCV 和 MediaPipe 庫。

        為什么需要實時背景去除?

        由于許多原因,視頻的背景需要修改,如背景中有很多其他中斷或背景顏色不適合該人。因此,我們使用實時背景替換技術來替換背景并添加替換為所需內容。

        流行的背景去除技術

        圖像剪切路徑 - 如果圖像的主題具有銳利的邊緣,則使用此技術。所有落在路徑之外的元素都將被消除。

        圖像剪切 – 在這里,我們剪切幀中所需的區域或主題并刪除背景。

        圖像遮罩 – 如果圖像有褶邊或細邊緣,我們可以使用圖像遮罩技術。

        擦除背景 – 使用任何不同的工具擦除圖像的背景許多著名的應用程序使用背景去除技術并用自定義技術替換它。在這里,我們將實現類似的東西,使用 OpenCV 和 CVzone。

        讓我們開始實施

        安裝所需的模塊。

        -- pip install OpenCV-python
        -- pip install cvzone
        -- pip install mediapipe
        首先,讓我們檢查一下我們的網絡攝像頭是否工作正常。import cv2
        cap = cv2.VideoCapture(0)
        cap.set(3, 640)
        cap.set(4, 480)
        while True:
        success, img = cap.read()
        cv2.imshow("Image", img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
        break
        如果你有網絡攝像頭,上面的代碼會彈出一個窗口,這里的幀大小是 640 X 480。所以我們需要注意,因為背景替換圖像的大小應該與幀大小相同,即 640 X 480 .

        現在在這里創建項目目錄中的文件夾,我正在創建一個名為*'BackgroundImages'*的文件夾。你可以下載任何圖像或任意數量的圖像并將它們放在此目錄中。項目結構將如下圖所示:

        讓我們在單獨的 python 文件中編寫一小段代碼,將*“BackgroundImages”*文件夾中的所有圖像大小調整 為 640 X 480。import cv2
        import os
        for root, subdirs, files in os.walk('D:/pycharmprojects/BackgroundRemover/BackgroundImages'):
           for f in files:
               if f.endswith('jpg'):
                   # print(f)
                   img = cv2.imread('D:/pycharmprojects/BackgroundRemover/BackgroundImages/' + f)
                   img = cv2.resize(img, (640, 480))
                   cv2.imwrite('D:/pycharmprojects/BackgroundRemover/BackgroundImages/'+f, img)
                   print(*["Image", f, "is resized to 640 X 480"])
        上面的代碼將讀取指定文件夾中的圖像(jpg)文件,并一次將所有圖像調整為 640 X480。調整所有圖像大小后的輸出

        現在我們都準備好實現背景替換技術了。導入需要的模塊import cv2
        import cvzone
        from cvzone.SelfiSegmentationModule import SelfiSegmentation
        import os
        在上面的模塊中,*“SelfSegmentation”*用于刪除框架的背景并將其替換為我們目錄中的圖像。cap = cv2.VideoCapture(0)
        cap.set(3, 640)
        cap.set(4, 480)
        # cap.set(cv2.CAP_PROP_FPS, 60)
        segmentor = SelfiSegmentation()
        fpsReader = cvzone.FPS()
        # imgBG = cv2.imread("BackgroundImages/3.jpg")
        listImg = os.listdir("BackgroundImages")
        imgList = []
        for imgPath in listImg:
           img = cv2.imread(f'BackgroundImages/{imgPath}')
           imgList.append(img)
        indexImg = 0
        在上面的代碼中,我們采取從網絡攝像頭輸入,并且還設置幀寬度為640 X 480然后調用SelfiSegmentation() ,并將其分配給一個變量segmentor,并且為了在顯示幀每秒(fps)的輸出幀,我們使用*cvzone.FPS()*函數。然后我們創建一個存在于BackgroundImages文件夾中的圖像列表,我們遍歷該列表并讀取每個圖像并將其附加到一個空列表中。初始索引設置為零。while True:
           success, img = cap.read()
           # imgOut = segmentor.removeBG(img, (255,0,255), threshold=0.83)
           imgOut = segmentor.removeBG(img, imgList[indexImg], threshold=0.8)
           imgStack = cvzone.stackImages([img, imgOut], 2,1)
           _, imgStack = fpsReader.update(imgStack)
           print(indexImg)
           cv2.imshow("image", imgStack)
           key = cv2.waitKey(1)
           if key == ord('a'):
               if indexImg>0:
                   indexImg -=1
           elif key == ord('d'):
               if indexImg           indexImg +=1
           elif key == ord('q'):
               break
        現在主要部分在 while 循環中從網絡攝像頭讀取幀,我們使用*segmentor.removeBG()*函數從幀中刪除背景并將其替換為目錄中的圖像。在上面的代碼中,你可以看到我們已經向segmentor.removeBG()函數傳遞了三個參數 ,即來自網絡攝像頭的圖像幀(img),然后是目錄中存在的圖像列表以及圖像索引(imgList[indexImg) ]),最后是閾值。如果閾值設置為 1,則閾值會削減所有內容,這里我們將其設置為 0.8,為了獲得更好的邊緣,請使用不同的閾值。然后我們使用cvzone.stackImages堆疊圖像*,* 這里我們將獲得背景替換圖像或幀的輸出。然后使用一個簡單的 if 語句,分配鍵來更改背景。例如,如果我們有 10 張背景圖像,根據上面的代碼,我們可以使用鍵“a”或鍵“d”來更改幀的背景。整個代碼如下。import cv2
        import cvzone
        from cvzone.SelfiSegmentationModule import SelfiSegmentation
        import os
        cap = cv2.VideoCapture(0)
        cap.set(3, 640)
        cap.set(4, 480)
        # cap.set(cv2.CAP_PROP_FPS, 60)
        segmentor = SelfiSegmentation()
        fpsReader = cvzone.FPS()
        # imgBG = cv2.imread("BackgroundImages/3.jpg")
        listImg = os.listdir("BackgroundImages")
        imgList = []
        for imgPath in listImg:
           img = cv2.imread(f'BackgroundImages/{imgPath}')
           imgList.append(img)
        indexImg = 0
        while True:
           success, img = cap.read()
           # imgOut = segmentor.removeBG(img, (255,0,255), threshold=0.83)
           imgOut = segmentor.removeBG(img, imgList[indexImg], threshold=0.8)
           imgStack = cvzone.stackImages([img, imgOut], 2,1)
           _, imgStack = fpsReader.update(imgStack)
           print(indexImg)
           cv2.imshow("image", imgStack)
           key = cv2.waitKey(1)
           if key == ord('a'):
               if indexImg>0:
                   indexImg -=1
           elif key == ord('d'):
               if indexImg           indexImg +=1
           elif key == ord('q'):
               break
        輸出截圖如下輸出 1:

        輸出 2:

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 广宁县| 绥阳县| 日本va欧美ⅴa欧美Va精品 | 538av| 平陆县| 成人网站18禁| 伊人在线视频| 老湿机69午夜福利区| 东阿县| 正在播放夫妇露脸自拍| 亚洲中文自拍| 银川市| 日韩?欧美?国产| 91熟女视频| 色婷婷成人| 天天操天天干视频| 四子王旗| 激情图区| 亚洲av日韩精品| 江陵县| 亚洲日韩AV无码专区影院| 精品人妻一区介绍| 柘城县| 人妻久久久| 国产熟女网站| 亚洲一区AV| 91视频最新网址| 日本无码中文| 亚洲激情偷拍| 91人人操| 亚洲熟女精品| 成人小说一区| 兴安盟| 天堂在线V| 婷婷亚洲五月花视频| 日韩丨亚洲丨制服|痴汉| 91成人视频在线观看| 熟女A片| 国产精品天天干| 日本狠狠干| 亚洲自拍电影|