Opencv中cv2.floodFill算法的使用
一、 泛洪算法——floodFill函數(shù)原型
cv2.floodFill(img,mask,seed,newvalue(BGR),(loDiff1,loDiff2,loDiff3),(upDiff1,upDiff2,upDiff3),flag)
- img:為待使用泛洪算法的圖像
- mask:為掩碼層,使用掩碼可以規(guī)定是在哪個(gè)區(qū)域使用該算法,如果是對(duì)于完整圖像都要使用,則掩碼層大小為原圖行數(shù)+2,列數(shù)+2.是一個(gè)二維的0矩陣,邊緣一圈會(huì)在使用算法是置為1。而只有對(duì)于掩碼層上對(duì)應(yīng)為0的位置才能泛洪,所以掩碼層初始化為0矩陣。【dtype:np.uint8】
- seed:為泛洪算法的種子點(diǎn),也是根據(jù)該點(diǎn)的像素判斷決定和其相近顏色的像素點(diǎn),是否被泛洪處理。
【類(lèi)似于
】
- newvalue:是對(duì)于泛洪區(qū)域新賦的值(B,G,R)
- (loDiff1,loDiff2,loDiff3):是相對(duì)于seed種子點(diǎn)像素可以往下的像素值,即seed(B0,G0,R0),泛洪區(qū)域下界為(B0-loDiff1,G0-loDiff2,R0-loDiff3)
- (upDiff1,upDiff2,upDiff3):是相對(duì)于seed種子點(diǎn)像素可以往上的像素值,即seed(B0,G0,R0),泛洪區(qū)域上界為(B0+upDiff1,G0+upDiff2,R0+upDiff3)
- flag:為泛洪算法的處理模式。

- 低八位 控制算法的連通性,是以seed點(diǎn)為中心,接著判斷周?chē)膸讉€(gè)像素點(diǎn),再將泛洪區(qū)域像素點(diǎn)周?chē)膸讉€(gè)像素點(diǎn)進(jìn)行考慮。 一般為4,8;默認(rèn)為4
- 中間八位 與掩碼層賦值密切相關(guān),一般使用(255<<8)使中間8位全位1,則值為255,也就是掩碼層對(duì)應(yīng)原圖的泛洪區(qū)域的部分被由原來(lái)的初值0賦值成255,如果中間8位為0,則賦值為1.
- 高八位 由opencv宏參數(shù)指定
- cv2.FLOODFILL_FIXED_RANGE:改變圖像,填充newvalue
- cv2.FLOODFILL_MASK_ONLY:不改變?cè)瓐D像,也就是newvalue參數(shù)失去作用,而是改變對(duì)應(yīng)區(qū)域的掩碼,設(shè)為中間八位的值


二、簡(jiǎn)單應(yīng)用
#泛洪填充(彩色圖像填充)
import cv2
import numpy as np
def fill_color_demo(image):
copyImg = image.copy()
h, w = image.shape[:2]
mask = np.zeros([h+2, w+2],np.uint8) #mask必須行和列都加2,且必須為uint8單通道陣列
#為什么要加2可以這么理解:當(dāng)從0行0列開(kāi)始泛洪填充掃描時(shí),mask多出來(lái)的2可以保證掃描的邊界上的像素都會(huì)被處理
cv.floodFill(copyImg, mask, (220, 250), (0, 255, 255), (100, 100, 100), (50, 50 ,50), cv.FLOODFILL_FIXED_RANGE)
cv.imshow("fill_color_demo", copyImg)
src = cv.imread('E:/imageload/baboon.jpg')
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
fill_color_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()


三、應(yīng)用,結(jié)合minareaRect
cv2.floodFill(initial_car,mask,(seed_x,seed_y),(255,0,0),(loDiff,loDiff,loDiff),(upDiff,upDiff,upDiff),flag)
points = []
row,column = mask.shape
for i in range(row):
for j in range(column):
if mask[i][j]==255:
points.append((j,i)) #點(diǎn)應(yīng)該輸入點(diǎn)坐標(biāo)(列,行)
points = np.asarray(points)
new_rect = cv2.minAreaRect(points)
到此這篇關(guān)于Opencv中cv2.floodFill算法的使用的文章就介紹到這了,更多相關(guān)Opencv cv2.floodFill內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)爬取百度圖片的方法示例
這篇文章主要介紹了python實(shí)現(xiàn)爬取百度圖片的方法,涉及Python基于requests、urllib等模塊的百度圖片抓取相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
利用python對(duì)mysql表做全局模糊搜索并分頁(yè)實(shí)例
這篇文章主要介紹了利用python對(duì)mysql表做全局模糊搜索并分頁(yè)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
利用Python將彩色圖像轉(zhuǎn)為灰度圖像的兩種方法
這篇文章主要給大家介紹了關(guān)于利用Python將彩色圖像轉(zhuǎn)為灰度圖像的兩種方法,以及python 批量將圖片轉(zhuǎn)為灰度圖的方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
基于python3.7利用Motor來(lái)異步讀寫(xiě)Mongodb提高效率(推薦)
Motor是一個(gè)異步mongodb driver,支持異步讀寫(xiě)mongodb。它通常用在基于Tornado的異步web服務(wù)器中。這篇文章主要介紹了基于python3.7利用Motor來(lái)異步讀寫(xiě)Mongodb提高效率,需要的朋友可以參考下2020-04-04
python Django框架快速入門(mén)教程(后臺(tái)管理)
Django 是一個(gè)開(kāi)放源代碼的 Web 應(yīng)用框架,由 Python 寫(xiě)成,今天通過(guò)本文給大家介紹python Django框架快速入門(mén)教程,適用后臺(tái)管理,感興趣的朋友跟隨小編一起看看吧2021-07-07
Python比較2個(gè)時(shí)間大小的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Python比較2個(gè)時(shí)間大小的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python中請(qǐng)使用isinstance()判斷變量類(lèi)型
這篇文章主要介紹了Python中請(qǐng)使用isinstance()判斷變量類(lèi)型,本文先是給出了isinstance函數(shù)判斷變量類(lèi)型的例子,并對(duì)isinstance 和 type的區(qū)別做了講解,需要的朋友可以參考下2014-08-08
Python隨機(jī)讀取文件實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Python隨機(jī)讀取文件的相關(guān)資料,需要的朋友可以參考下2017-05-05

