OpenCV基礎筆記5 ROI與泛洪填充

2021-10-07 19:19:22 字數 3589 閱讀 6395

roi(region of interest),即感興趣區域。有時在對一幅影象進行處理分析時,需要對其特定區域進行操作。例如我們需要檢測一副人像中眼睛的位置,我們首先應在影象中找到人臉,再在人臉的區域範圍內找到眼睛,這樣可以提高程式執行的準確性和效能,而不是直接在一副影象中進行全域性搜尋。

如現在需要對lena影象中的臉部作為roi區域,並對該區域進行灰度處理,**如下:

import cv2 as cv

src = cv.imread("lena256.tif")

cv.namedwindow("input image", cv.window_autosize)

cv.imshow("input image", src)

face = src[80:200, 100:200]

gray = cv.cvtcolor(face, cv.color_bgr2gray) # 將3通道的彩色影象轉換為灰度影象

backface = cv.cvtcolor(gray, cv.color_gray2bgr) # 將單通道的灰度影象變為三通道的影象

src[80:200, 100:200] = backface

cv.imshow("face", src)

cv.waitkey(0)

cv.destroyallwindows()

處理結果如下圖所示:

泛洪填充演算法(flood fill algorithm),又叫洪水填充演算法或者漫水填充演算法。泛洪填充演算法的原理就是從乙個點開始,將該點附近畫素點填充成新的顏色,直到封閉區域內的所有畫素點都被填充新顏色為止。該演算法經常用來標記或者分離影象的一部分,從而進行處理或分析。漫水填充也可以從輸入影象獲取掩碼區域,掩碼會加速處理過程,或者只處理掩碼指定的畫素點。

泛洪填充演算法在opencv中所用到的api為floodfill(),在python中該函式定義為:

def floodfill(image, mask, seedpoint, newval, lodiff=none, updiff=none, flags=none)
入口引數含義image

原始影象

mask

掩膜seedpoint

種子點(即起始點)

newval

被填充的畫素點新的畫素值(即新的顏色)

lodiff

當前的觀察點畫素值與其相鄰區域畫素值或待加入該區域的畫素之間的亮度或顏色之間負差的最大值(即起始點畫素值減去該畫素值為興趣區域範圍的最小畫素值)

updiff

當前的觀察點畫素值與其相鄰區域畫素值或待加入該區域的畫素之間的亮度或顏色之間負差的最小值(即起始點畫素值加上該畫素值為興趣區域範圍的最大畫素值)

flag

標誌位:cv_floodfill_fixed_range 或cv_floodfill_mask_only

cv_floodfill_fixed_range 與 cv_floodfill_mask_only區別:

(1)當標誌位為cv_floodfill_fixed_range時,待處理的畫素點與種子點作比較,在範圍之內,則填充此畫素,改變影象。

(2)當標誌位為cv_floodfill_mask_only時,函式不會去改變原始影象,而是去填充掩碼影象mask,mask的指定的位置為0時才填充,不為0不填充。

例項一:採用cv.cv_floodfill_fixed_range進行彩色影象的填充

import cv2 as cv

import numpy as np

# 彩色影象的填充

def fill_color_demo(image):

copyimg = image.copy()

# 使用的截斷,獲取shape的前兩個屬性

h, w = image.shape[0:2]

# 注意mask遮罩層為0 型別為乙個uint8 比原始影象長寬都多2(固定寫法)

mask = np.zeros([h+2, w+2], np.uint8)

cv.floodfill(copyimg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.floodfill_fixed_range)

cv.imshow("fill_color_demo", copyimg)

src = cv.imread("lena256.tif")

cv.namedwindow("input image", cv.window_autosize)

cv.imshow("input image", src)

fill_color_demo(src)

cv.waitkey(0)

cv.destroyallwindows()

程式執行結果如下圖所示:

例項二:採用cv.cv_floodfill_mask_only進行二值化影象的填充

import cv2 as cv

import numpy as np

# 二值化影象填充

def fill_binary_demo():

image = np.zeros([400, 400, 3], np.uint8)

image[100:300, 100:300, :] = 255

cv.imshow("fill_binary_before", image)

h, w = image.shape[0:2]

mask = np.ones([h+2, w+2, 1], np.uint8)

mask[101:301, 101:301] = 0 # 注意:mask的roi區域必須為0才可以進行填充

cv.floodfill(image, mask, (200, 200), (0, 0, 255), cv.floodfill_mask_only)

cv.imshow("filled_binary_after", image)

src = cv.imread("lena256.tif")

cv.namedwindow("input image", cv.window_autosize)

cv.imshow("input image", src)

fill_color_demo(src)

cv.waitkey(0)

cv.destroyallwindows()

程式執行結果如下圖所示:

opencv學習筆記 5 ROI與泛洪填充

基於python3的opencv影象處理教程 在常見的計算機視覺問題中,通常我們只對影象中的某一部分區域感興趣,比如人臉區域等,因此我們只需要對人臉區域部分進行提取,然後再進行後續的操作。對於影象roi區域,只需要將自己預先計算好的區域大概範圍的影象值賦值給新的變數並顯示即可。最方便的方式是使用nu...

opencv基礎入門 ROI與泛洪填充

python opencv影象處理 六 roi與泛洪填充 蛋片雞 影象處理之泛洪填充演算法 flood fill algorithm csdn部落格 roi region of interest 感興趣區域。機器視覺 影象處理中,從被處理的影象以方框 圓 橢圓 不規則多邊形等方式勾勒出需要處理的區域...

Opencv學習筆記之感性區 ROI

opencv3程式設計入門 系列學習筆記 roi 感興趣 說明 roi就是影象分析所關注的重點,劃定乙個區域,以便進行進一步處理,同時可以指定想要讀入的目標,減少處理時間,增加精度。設定roi常用的兩種方式 第一種 使用表示矩形區域的rect.由左上角的座標 建構函式前兩個引數 和矩形的長寬 建構函...