Opencv Python版學習筆記(二)漫水填充

2021-06-15 04:35:29 字數 2343 閱讀 3571

漫水填充:也就是用一定顏色填充聯通區域,通過設定可連通畫素的上下限以及連通方式來達到不同的填充效果;

程式說明依舊以注釋的形式寫出,在python例程的基礎上修改為隨機顏色填充:

h, w = img.shape[:2]#得到影象的高和寬

mask = np.zeros((h+2, w+2), np.uint8)#掩碼單通道8位元,長和寬都比輸入影象多兩個畫素點,滿水填充不會超出掩碼的非零邊緣

seed_pt = none

fixed_range = true

connectivity = 4

def update(dummy=none):

if seed_pt is none:

cv2.imshow('floodfill', img)

return

flooded = img.copy()#以副本的形式進行填充,這樣每次

mask[:] = 0#掩碼初始為全0

lo = cv2.gettrackbarpos('lo', 'floodfill')#觀察點畫素鄰域負差最大值(也就是與選定畫素多少差值內的歸為同一區域)

hi = cv2.gettrackbarpos('hi', 'floodfill')#觀察點畫素鄰域正差最大值

flags = connectivity#低位位元包含連通值, 4 (預設) 或 8

if fixed_range:

flags |= cv2.floodfill_fixed_range #考慮當前象素與種子象素之間的差(高位元也可以為0)

#以白色進行漫水填充

cv2.floodfill(flooded, mask, seed_pt, (random.randint(0,255), random.randint(0,255), random.randint(0,255)), (lo,)*3, (hi,)*3, flags)

cv2.circle(flooded, seed_pt, 2, (0, 0, 255), -1)#選定基準點用紅色圓點標出

cv2.imshow('floodfill', flooded)

def onmouse(event, x, y, flags, param):#滑鼠響應函式

global seed_pt

if flags & cv2.event_flag_lbutton:#滑鼠左鍵響應,選擇漫水填充基準點

seed_pt = x, y

update()

update()

cv2.setmousecallback('floodfill', onmouse)

cv2.createtrackbar('lo', 'floodfill', 20, 255, update)

cv2.createtrackbar('hi', 'floodfill', 20, 255, update)

while true:

ch = 0xff & cv2.waitkey()

if ch == 27:

break

if ch == ord('f'):

fixed_range = not fixed_range #選定時flags的高位位元位0,也就是鄰域的選定為當前畫素與相鄰畫素的的差,這樣的效果就是聯通區域會很大

print 'using %s range' % ('floating', 'fixed')[fixed_range]

update()

if ch == ord('c'):

connectivity = 12-connectivity #選擇4方向或則8方向種子擴散

print 'connectivity =', connectivity

update()

cv2.destroyallwindows()

更換ROS中的OpenCV python版本

ros kinetic中預設安裝的是opencv 3.3.1 dev版本,而且ros的python環境預設只有2.7版本,通過pip安裝了別的版本的opencv後ros還是會最先呼叫預設的3.3.1,所以需要先解除安裝該版本 sudo easy install trash cli sudo tras...

opencv python學習筆記八

十 影象上的算術運算 常用運算有 加法 減法 位運算 cv2.add cv2.addweighted 函式原型 defadd src1,src2,dst none,mask none,dtype none defaddweighted src1,第乙個原陣列 alpha,第乙個原陣列的權值 src2...

opencv python學習筆記十一

14 幾何變換 移動,旋轉 仿射變換 常用函式 cv2.getperspectivetransform 函式原型 defgetperspectivetransform src,dst cv2.warpaffine 函式原型,接收 2 3的矩陣 defwarpaffine src,輸入源影象 m,透視...