RIO与泛洪填充——(OpenCV+Python)
1.ROI
ROI(region of interest),感興趣區域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域,稱為感興趣區域,ROI。
圖片截取、合并、填充
import cv2 as cvsrc = cv.imread('C:\pics\samples\data\lena.jpg') cv.namedWindow('first_image',cv.WINDOW_AUTOSIZE) cv.imshow('first_image',src) face = src[200:300,200:400] #選擇200:300行、200:400列區域作為截取圖像 gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY) #生成的灰度圖是單通道圖像 backface = cv.cvtColor(gray,cv.COLOR_GRAY2RGB) #將單通道圖像轉換為三通道RGB灰度圖,因為只有三通道的backface才可以賦給三通道的src src[200:300,200:400] = backface cv.imshow("face",src) cv.waitKey(0) cv.destoryAllWindows()
2.泛洪填充(彩色圖像填充)
1.opencv里的mask都是為uin8類型的單通道陣列
2.泛洪填充算法也叫漫水填充算法。opencv的floodFill函數原型: floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, image, mask, rect
image參數表示輸入/輸出1或3通道,8位或浮點圖像。
mask參數表示掩碼,該掩碼是單通道8位圖像,比image的高度多2個像素,寬度多2個像素。填充時不能穿過輸入掩碼中的非零像素。
seedPoint參數表示泛洪算法(漫水填充算法)的起始點。
newVal參數表示在重繪區域像素的新值。
loDiff參數表示當前觀察像素值與其部件鄰域像素值或待加入該組件的種子像素之間的亮度或顏色之負差的最大值。
upDiff參數表示當前觀察像素值與其部件鄰域像素值或待加入該組件的種子像素之間的亮度或顏色之正差的最大值。
flags參數:操作標志符,包含三部分:(參考https://www.cnblogs.com/little-monkey/p/7598529.html)
低八位(0~7位):用于控制算法的連通性,可取4(默認)或8。
中間八位(8~15位):用于指定掩碼圖像的值,但是如果中間八位為0則掩碼用1來填充。
高八位(16~32位):可以為0或者如下兩種標志符的組合:
FLOODFILL_FIXED_RANGE:表示此標志會考慮當前像素與種子像素之間的差,否則就考慮當前像素與相鄰像素的差。FLOODFILL_MASK_ONLY:表示函數不會去填充改變原始圖像,而是去填充掩碼圖像mask,mask指定的位置為零時才填充,不為零不填充。
3.泛洪填充(二值圖像填充)
#泛洪填充(二值圖像填充) import cv2 as cv import numpy as np def fill_binary():image = np.zeros([400, 400, 3], np.uint8)image[100:300, 100:300] = 255cv.imshow("fill_binary", image)mask = np.ones([402, 402], np.uint8) #mask要保證比原圖像高和寬都多2mask[101:301, 101:301] = 0cv.floodFill(image, mask, (200,200), (255 , 0, 0), cv.FLOODFILL_MASK_ONLY) #mask不為0的區域不會被填充,mask為0的區域才會被填充cv.imshow("filled_binary", image) fill_binary() cv.waitKey(0) cv.destroyAllWindows()
1.不管是FLOODFILL_FIXED_RANGE還是FLOODFILL_MASK_ONLY操作,泛洪填充都不會填充掩膜mask的非零像素區域
2. mask[101:301, 101:301] = 0 這條語句為什么是101:301而不是100:300呢?我覺得應該是掩膜mask是比原圖像左右上下都多了1,所以掩膜mask左右一共比原圖像多2,上下也比原圖像多2。那么原圖像的100就自然對應到掩膜的101,同樣原圖像的300就自然對應到掩膜的301。
3.當FLOODFILL_MASK_ONLY設置了的時候,原圖不會改變,只會用中間八位的值填沖mask。 floodFill的flags參數的中間八位的值就是用于指定填充掩碼圖像的值的,但是如果flags中間八位的值為0,則掩碼會用1來填充。
很多問題參考https://www.cnblogs.com/FHC1994/p/9033580.html,感謝!!!
總結
以上是生活随笔為你收集整理的RIO与泛洪填充——(OpenCV+Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 珊瑚虫论坛版主自建网站声援珊瑚虫QQ
- 下一篇: websocket python爬虫_p