国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV4圖像處理-圖像交互式分割-GrabCut

這篇具有很好參考價值的文章主要介紹了OpenCV4圖像處理-圖像交互式分割-GrabCut。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文將實現(xiàn)一個與人(鼠標)交互從而分割背景的程序。

1.理論介紹

用戶指定前景的大體區(qū)域,剩下為背景區(qū)域,還可以明確指出某些地方為前景或者背景,GrabCut算法采用分段迭代的方法分析前景物體形成模型樹,最后根據(jù)權(quán)重決定某個像素是前景還是背景。

算法:GrabCut(img, mask, rect, bgdModel, fgdModel, 5, //iteratormode)
img:要分割的圖像
mask:生稱的掩碼(以原圖像大小為基準),該算法會把mask分為4部分,像素點的值為0,1,2,3四種值嗎,其中每種值代表不同的意思。
rect:用戶指定的矩形區(qū)域,元組的形式(起始坐標x, y , width,height)
bgdModel:1行65列的0矩陣,元素類型為float64。
fgdModel:1行65列的0矩陣,元素類型為float64。
5:迭代次數(shù)iterator
mode:第一次找用RECT,以后迭代用MASK

OpenCV4圖像處理-圖像交互式分割-GrabCut,圖像處理,圖像處理,python,opencv

OpenCV4圖像處理-圖像交互式分割-GrabCut,圖像處理,圖像處理,python,opencv

2. 鼠標交互

下面是一個鼠標交互的程序,可以通過點擊鼠標滑動鼠標在圖像上作圖。

不太清楚的讀者可以參考下面博客:Opencv(圖像處理)-基于Python-繪圖功能

代碼如下:

import cv2
import numpy as np


'''
該api可以在圖上作圖
點擊并滑動鼠標可以在圖上畫出矩形框
'''


# 定義一個類來封裝該方法
class MouseStich:
    startX = 0
    startY = 0
    rect_flag = False
    def onmouse(self, event, x, y, flags, param):
        # print("onmouse")
        if event == cv2.EVENT_LBUTTONDOWN:
            self.rect_flag = True
            self.startX = x
            self.startY = y
            # print("LBUTTONDOWN")
        elif event == cv2.EVENT_LBUTTONUP:
            # print("LBUTTONUP")
            self.rect_flag = False
            cv2.rectangle(self.img,
                          (self.startX, self.startY),
                          (x, y),
                          (0, 0, 255),
                          3)
        elif event == cv2.EVENT_MOUSEMOVE:
            # print("MOUSEMOVE")
            # 每次都在新的圖像上畫
            if self.rect_flag == True:
                self.img = self.img2.copy()
                cv2.rectangle(self.img,
                              (self.startX, self.startY),
                              (x, y),
                              (0, 255, 0),
                              3)

    def run(self):
        print("run....")
        # 綁定鼠標事件的窗口
        cv2.namedWindow('input')
        cv2.setMouseCallback('input', self.onmouse)
		# 暫存一個img2
        self.img = cv2.imread('./image/lena.jpg')
        self. img2 = self.img.copy()
        # 讀取圖片,在該窗口顯示
        while(1):
            # 展示原圖,被畫的圖
            cv2.imshow('input', self.img)
            k = cv2.waitKey(100) & 0xff
            if k == ord('q'):
                break




MouseStich().run()

3. GrabCut

將GrabCut需要的參數(shù)構(gòu)造好后,傳進去,獲得mask掩模,然后我們用np.where把像素值是1,3的位置改成255,目的是用bitwise_and函數(shù)提取出前景區(qū)域。

import cv2
import numpy as np


'''
該api可以在圖上作圖
點擊并滑動鼠標可以在圖上畫出矩形框
'''


# 定義一個類來封裝該方法
class MouseStich:
    startX = 0
    startY = 0
    rect_flag = False
    rect = (0, 0, 0, 0)
    def onmouse(self, event, x, y, flags, param):

        # print("onmouse")
        if event == cv2.EVENT_LBUTTONDOWN:
            self.rect_flag = True
            self.startX = x
            self.startY = y
            # print("LBUTTONDOWN")
        elif event == cv2.EVENT_LBUTTONUP:
            # print("LBUTTONUP")
            self.rect_flag = False
            cv2.rectangle(self.img,
                          (self.startX, self.startY),
                          (x, y),
                          (0, 0, 255),
                          3)
        elif event == cv2.EVENT_MOUSEMOVE:
            # print("MOUSEMOVE")
            # 每次都在新的圖像上畫
            if self.rect_flag == True:
                # 每次都在新的圖像上畫move
                self.img = self.img2.copy()
                cv2.rectangle(self.img,
                              (self.startX, self.startY),
                              (x, y),
                              (0, 255, 0),
                              3)
        # 構(gòu)造矩形的信息
        self.rect = (min(self.startX, x), min(self.startY, y),
                     abs(self.startX - x), abs(self.startY - y))

    def run(self):
        print("run....")
        # 綁定鼠標事件的窗口
        cv2.namedWindow('input')
        cv2.setMouseCallback('input', self.onmouse)

        self.img = cv2.imread('./image/lena.jpg')
        self. img2 = self.img.copy()
        # 定義一個與圖片相同大小的掩碼
        self.mask = np.zeros(self.img.shape[:2], dtype=np.uint8)
        self.output = np.zeros(self.img.shape, dtype=np.uint8)


        # 讀取圖片,在該窗口顯示
        while(1):
            # 展示原圖,被畫的圖
            cv2.imshow('input', self.img)
            cv2.imshow('output', self.output)
            k = cv2.waitKey(100) & 0xff
            if k == ord('q'):
                break

            if k == ord('g'):
                bgdmodel = np.zeros((1, 65), np.float64)
                fgdmodel = np.zeros((1, 65), np.float64)
                cv2.grabCut(self.img2, self.mask, self.rect,
                            bgdmodel, fgdmodel,
                            1,
                            cv2.GC_INIT_WITH_RECT)
            # 構(gòu)造提取前景的淹沒
            mask2 = np.where((self.mask==1)|(self.mask==3), 255, 0).astype('uint8')
            self.output = cv2.bitwise_and(self.img2, self.img2, mask=mask2)



MouseStich().run()

展示效果:先使用鼠標畫出區(qū)域,然后按’g’分割圖片。

OpenCV4圖像處理-圖像交互式分割-GrabCut,圖像處理,圖像處理,python,opencv

以上是關(guān)于GrabCut算法的實戰(zhàn)內(nèi)容,如有問題歡迎在評論區(qū)討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-599848.html

到了這里,關(guān)于OpenCV4圖像處理-圖像交互式分割-GrabCut的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MATLAB 之 隱函數(shù)繪圖、圖形修飾處理、圖像處理與動畫制作和交互式繪圖工具

    MATLAB 之 隱函數(shù)繪圖、圖形修飾處理、圖像處理與動畫制作和交互式繪圖工具

    如果給定了函數(shù)的顯式表達式,可以先設(shè)置自變量向量,然后根據(jù)表達式計算出函數(shù)向量,從而用 plot 、 plot3 等函數(shù)繪制出圖形。 但如果函數(shù)用隱函數(shù)形式給出,則很難用上述方法繪制出圖形。對此,MATLAB 提供了一些函數(shù)用來繪制隱函數(shù)圖形。 隱函數(shù)二維繪圖采用 ezplot 函數(shù)

    2024年02月07日
    瀏覽(26)
  • OpenCV構(gòu)建交互式圖像距離測量工具

    在計算機視覺和圖形學應(yīng)用中,準確測量圖像上的點之間距離是一項常見且重要的任務(wù)。本篇技術(shù)博客將詳細介紹如何利用Python編程語言和OpenCV庫構(gòu)建一個交互式的圖像距離測量工具。我們將通過編寫一個名為ImageProcessor的類,讓用戶能夠在圖像上點擊選取點,并實時顯示兩

    2024年04月14日
    瀏覽(25)
  • 【OpenCV-Python】——單/多模板匹配&分水嶺算法圖像分割&圖像金字塔&交互式前景提取

    目錄 前言: 1、模板匹配 1.1 單目標匹配 1.2 多目標匹配 2、圖像分割

    2024年02月07日
    瀏覽(40)
  • OpenCV4.x圖像處理實例-搭建身份識別系統(tǒng)

    OpenCV4.x圖像處理實例-搭建身份識別系統(tǒng)

    在本文中,將介紹如何使用 OpenCV 搭建一個人臉檢測與身份識別系統(tǒng)。 為了構(gòu)建我們的人臉識別系統(tǒng),我們將首先執(zhí)行人臉檢測,使用深度學習從每張人臉中提取人臉特征數(shù)據(jù),在提取特征數(shù)據(jù)上訓練人臉識別模型,最后使用 OpenCV 識別圖像和視頻流中的人臉,并識別身份。

    2024年02月03日
    瀏覽(26)
  • 使用 OpenCV 和 GrabCut 算法進行交互式背景去除

    ????????我想,任何人都可以嘗試從圖像中刪除背景。當然,有大量可用的軟件或工具能夠做到這一點,但其中一些可能很昂貴。但是,我知道有人使用窗口繪畫3D魔術(shù)選擇或PowerPoint背景去除來刪除背景。 ????????如果您是計算機視覺領(lǐng)域的初學者,這可能適合您。讓

    2024年02月15日
    瀏覽(18)
  • OpenCV4.x圖像處理實例-YOLO v8檢測與識別物體

    本文將詳細介紹通過OpenCV的DNN模塊,使用YOLO V8模型進行對靜態(tài)圖像、視頻流和攝像頭進行物體檢測與識別。 YOLO v8 (You Only Look Once)由 Ultralytics 開發(fā)的一種先進的 (SOTA) 模型。它建立在以前成功的 YOLO 版本的基礎(chǔ)上,并引入了新的功能和改進,以進一步提高性能和靈活性。

    2024年02月08日
    瀏覽(27)
  • 從ChatGPT到ChatCAD:基于大型語言模型的醫(yī)學圖像交互式計算機輔助診斷

    從ChatGPT到ChatCAD:基于大型語言模型的醫(yī)學圖像交互式計算機輔助診斷

    1. ? 標題: ChatCAD: Interactive Computer-Aided Diagnosis on Medical Image using Large Language Models. 2. ? 期刊: arXiv 3. IF/JCR/分區(qū): 無 4. DOI: arXiv:2302.07257 5. 作者: 沈定剛教授團隊 2023年年初最火熱的話題之一就是OpenAI的ChatGPT1,給人類帶來了巨大的沖擊。1月底,美國《財富》雜志2/3月合刊的

    2023年04月14日
    瀏覽(18)
  • 交互式數(shù)據(jù)分析和處理新方法:pandas-ai =Pandas + ChatGPT

    交互式數(shù)據(jù)分析和處理新方法:pandas-ai =Pandas + ChatGPT

    Python Pandas是一個為Python編程提供數(shù)據(jù)操作和分析功能的開源工具包。這個庫已經(jīng)成為數(shù)據(jù)科學家和分析師的必備工具。它提供了一種有效的方法來管理結(jié)構(gòu)化數(shù)據(jù)(Series和DataFrame)。 在人工智能領(lǐng)域,Pandas經(jīng)常用于機器學習和深度學習過程的預處理步驟。Pandas通過提供數(shù)據(jù)清理

    2024年02月03日
    瀏覽(25)
  • Pandas + ChatGPT 超強組合,pandas-ai :交互式數(shù)據(jù)分析和處理新方法

    Pandas + ChatGPT 超強組合,pandas-ai :交互式數(shù)據(jù)分析和處理新方法

    Python Pandas是一個為Python編程提供數(shù)據(jù)操作和分析功能的開源工具包。這個庫已經(jīng)成為數(shù)據(jù)科學家和分析師的必備工具。它提供了一種有效的方法來管理結(jié)構(gòu)化數(shù)據(jù)(Series和DataFrame)。 在人工智能領(lǐng)域,Pandas經(jīng)常用于機器學習和深度學習過程的預處理步驟。Pandas通過提供數(shù)據(jù)清理

    2024年02月05日
    瀏覽(18)
  • Pandas+ChatGPT超強組合pandas-ai:交互式數(shù)據(jù)分析和處理新方法

    Pandas+ChatGPT超強組合pandas-ai:交互式數(shù)據(jù)分析和處理新方法

    Python Pandas是一個為Python編程提供數(shù)據(jù)操作和分析功能的開源工具包。這個庫已經(jīng)成為數(shù)據(jù)科學家和分析師的必備工具。它提供了一種有效的方法來管理結(jié)構(gòu)化數(shù)據(jù)(Series和DataFrame)。 在人工智能領(lǐng)域,Pandas經(jīng)常用于機器學習和深度學習過程的預處理步驟。Pandas通過提供數(shù)據(jù)清理

    2024年02月12日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包