您好,登錄后才能下訂單哦!
這篇文章主要講解了“Opencv中cv2.floodFill算法的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Opencv中cv2.floodFill算法的用法”吧!
一、 泛洪算法——floodFill函數(shù)原型
二、簡單應(yīng)用
三、應(yīng)用,結(jié)合minareaRect
cv2.floodFill(img,mask,seed,newvalue(BGR),(loDiff1,loDiff2,loDiff3),(upDiff1,upDiff2,upDiff3),flag)
img:為待使用泛洪算法的圖像
mask:為掩碼層,使用掩碼可以規(guī)定是在哪個區(qū)域使用該算法,如果是對于完整圖像都要使用,則掩碼層大小為原圖行數(shù)+2,列數(shù)+2.是一個二維的0矩陣,邊緣一圈會在使用算法是置為1。而只有對于掩碼層上對應(yīng)為0的位置才能泛洪,所以掩碼層初始化為0矩陣。【dtype:np.uint8】
seed:為泛洪算法的種子點,也是根據(jù)該點的像素判斷決定和其相近顏色的像素點,是否被泛洪處理。
【類似于】
newvalue:是對于泛洪區(qū)域新賦的值(B,G,R)
(loDiff1,loDiff2,loDiff3):是相對于seed種子點像素可以往下的像素值,即seed(B0,G0,R0),泛洪區(qū)域下界為(B0-loDiff1,G0-loDiff2,R0-loDiff3)
(upDiff1,upDiff2,upDiff3):是相對于seed種子點像素可以往上的像素值,即seed(B0,G0,R0),泛洪區(qū)域上界為(B0+upDiff1,G0+upDiff2,R0+upDiff3)
flag:為泛洪算法的處理模式。
低八位 控制算法的連通性,是以seed點為中心,接著判斷周圍的幾個像素點,再將泛洪區(qū)域像素點周圍的幾個像素點進(jìn)行考慮。 一般為4,8;默認(rèn)為4
中間八位 與掩碼層賦值密切相關(guān),一般使用(255<<8)使中間8位全位1,則值為255,也就是掩碼層對應(yīng)原圖的泛洪區(qū)域的部分被由原來的初值0賦值成255,如果中間8位為0,則賦值為1.
高八位 由opencv宏參數(shù)指定
cv2.FLOODFILL_FIXED_RANGE:改變圖像,填充newvalue
cv2.FLOODFILL_MASK_ONLY:不改變原圖像,也就是newvalue參數(shù)失去作用,而是改變對應(yīng)區(qū)域的掩碼,設(shè)為中間八位的值
#泛洪填充(彩色圖像填充) 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列開始泛洪填充掃描時,mask多出來的2可以保證掃描的邊界上的像素都會被處理 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()
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)) #點應(yīng)該輸入點坐標(biāo)(列,行) points = np.asarray(points) new_rect = cv2.minAreaRect(points)
感謝各位的閱讀,以上就是“Opencv中cv2.floodFill算法的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Opencv中cv2.floodFill算法的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。