OpenCV+python:ROI与泛洪填充
1,ROI
感興趣區(qū)(Region of Interest,ROI) 是圖像的一部分,它通過在圖像上選擇或使用諸如設(shè)定閾值(thresholding) 或者從其他文件(如矢量> 轉(zhuǎn)換獲得等方法生成。機(jī)器視覺、圖像處理中,感趣區(qū)可以是從被處理的圖像以方框、圓、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域,通常用來作為圖像分類的樣本、掩膜、裁剪區(qū)或及其他操作。
源代碼:
import cv2 as cv
import numpy as npsrc = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)ROI = src[50:250, 100:300] #假設(shè)我們對她的帽子感興趣,指定寬高的區(qū)域
gray = cv.cvtColor(ROI, cv.COLOR_BGR2GRAY) #轉(zhuǎn)換成灰度圖
backROI = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) #還原為RGB圖
src[50:250, 100:300] = backROI #重新置在原圖中(ROI操作)
cv.imshow("hat", src)cv.waitKey(0)
cv.destroyAllWindows()
運(yùn)行結(jié)果:
2,泛洪填充算法(Flood Fill Algorithm)
泛洪填充算法又稱洪水填充算法,是在很多圖形繪制軟件中常用的填充算法,最熟悉不過就是windows paint的油漆桶功能。算法的原理很簡單,就是從一個點(diǎn)開始附近像素點(diǎn),填充成新的顏色,直到封閉區(qū)域內(nèi)的所有像素點(diǎn)都被填充新顏色為止。泛紅填充實(shí)現(xiàn)最常見有四鄰域像素填充法,八鄰域像素填充法,基于掃描線的像素填充方法。根據(jù)實(shí)現(xiàn)又可以分為遞歸與非遞歸(基于棧)。所謂的floodFill 漫水填充就是在一張圖片中,和種子點(diǎn)像素相差在[-loDiff,+upDiff]的時候就用newVal來填充這個點(diǎn)。
def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None):1.操作的圖像,
2.掩碼,
3.起始像素值, #我們指定的第一個點(diǎn)的三個通道值
4.填充的顏色,
5.填充顏色的低值, 參數(shù)3的三通道值 減去 參數(shù)5 #低值三通道
6.填充顏色的高值 , 參數(shù)3的三通道值 加上 參數(shù)6 #高值三通道
7.填充的方法 #彩色圖像一般是FLOODFILL_FIXED_RANGE 指定顏色填充;還有一種是FLOODFILL_MASK_ONLY,mask的指定的位置為零時才填充,不為零不填充
源代碼:
import cv2 as cv
import numpy as npdef fill_color_demo(image):copyImg = image.copy() #拷貝原圖像h, w = image.shape[:2] #返回高和寬mask = np.zeros([h+2, w+2], np.uint8) #+2是為了使邊緣像素也被修改cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)cv.imshow("fill_color_demo", copyImg)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, 1], np.uint8) #為1不填充,為0才進(jìn)行填充,默認(rèn)mask是單通道的,通道數(shù)1可寫可不寫mask[101:301, 101:301] = 0 #加一的原因是mask[h+2,w+2],imge原來的ROI區(qū)域?qū)?yīng)的是mask[+1,+1]的區(qū)域cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY) # 最好寫到我們填充的圖像中間cv.imshow("filled binary", image)src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
fill_color_demo(src)
fill_binary()cv.waitKey(0)
cv.destroyAllWindows()
運(yùn)行結(jié)果:
彩色填充
二值填充
總結(jié)
以上是生活随笔為你收集整理的OpenCV+python:ROI与泛洪填充的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法及其复杂度度量简介
- 下一篇: OpenCV+python:模糊操作