ROI區域操作與泛紅填充
阿新 • • 發佈:2021-08-13
努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。''' ROI(region of interest), 也就是感興趣區域,如果你設定了影象了ROI, 那麼在使用OpenCV的函式的時候,會只對ROI區域操作, 其他區域忽略。 ''' import cv2 as cv import numpy as np # 擷取圖片中的指定區域或在指定區域新增某一圖片 def jie_image(src1): # 擷取第5行到89行的第500列到630列的區域 src2 = src1[20:100,500:700] cv.imshow('intercept',src2) # 擷取圖片 src1[105:185,300:500] = src2 # 指定位置填充,大小要一樣才能填充 cv.imshow('composite',src1) # 合成圖片 # 指定顏色替換 def fill_image(image): copyImage = image.copy() # 複製原影象 h,w = copyImage.shape[:2] # 讀取影象的寬和高 # 注意是uint8,是不Unit8 mask = np.zeros([h+2,w+2],np.uint8) #新建影象矩陣 +2是官方函式要求 # 泛洪填充7個引數,夠頭疼的 cv.floodFill(copyImage, mask, (0, 80), (0, 100, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE) ''' floodFill( 1.操作的影象, 2.掩模, 3.起始畫素值,4.填充的顏色, 5.填充顏色的低值, 6.填充顏色的高值 ,7.填充的方法 引數5.填充顏色的低值就是:引數3 減去 引數5 引數6.填充顏色的高值就是:引數3 加上 引數6 即是這兩個數值之間的色素替換為引數4的顏色 ''' cv.imshow('floodFill',copyImage) # 指定位置填充 def fill_binary(): # 建立一張400*400的黑圖 image = np.zeros([400,400,3],np.uint8) image[50:350,50:350,:] = 255 cv.imshow('original',image) # mask的大小一定比原圖大2 #注意是uint8,是不Unit8 同樣的錯誤一般還會再犯 mask = np.ones([402,402,1],np.uint8) # 將下面的區域賦值為0 mask[103:301,101:301] = 0 # 進行指定位置填充 cv.floodFill(image,mask,(200, 200), (0, 0, 255),(10,10,10),(10, 10, 10), cv.FLOODFILL_MASK_ONLY) cv.imshow('floodFill2',image) if __name__ == '__main__': ''' ROI切片填充 ''' # src = cv.imread('pic/bizhi.jpg') # cv.imshow('original',src) # jie_image(src) # cv.waitKey(0) # cv.destroyAllWindows() ''' 泛洪填充fill_image() ''' # src = cv.imread('pic/bizhi.jpg') # cv.imshow('original',src) # fill_image(src) # cv.waitKey(0) # cv.destroyAllWindows() ''' 指定位置填充fill_binary() ''' fill_binary() cv.waitKey(0) cv.destroyAllWindows()