OpenCV+python:ROI与泛洪填充
生活随笔
收集整理的這篇文章主要介紹了
OpenCV+python:ROI与泛洪填充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,ROI
感興趣區(Region of Interest,ROI) 是圖像的一部分,它通過在圖像上選擇或使用諸如設定閾值(thresholding) 或者從其他文件(如矢量> 轉換獲得等方法生成。機器視覺、圖像處理中,感趣區可以是從被處理的圖像以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域,通常用來作為圖像分類的樣本、掩膜、裁剪區或及其他操作。
源代碼:
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] #假設我們對她的帽子感興趣,指定寬高的區域
gray = cv.cvtColor(ROI, cv.COLOR_BGR2GRAY) #轉換成灰度圖
backROI = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) #還原為RGB圖
src[50:250, 100:300] = backROI #重新置在原圖中(ROI操作)
cv.imshow("hat", src)cv.waitKey(0)
cv.destroyAllWindows()
運行結果:
2,泛洪填充算法(Flood Fill Algorithm)
泛洪填充算法又稱洪水填充算法,是在很多圖形繪制軟件中常用的填充算法,最熟悉不過就是windows paint的油漆桶功能。算法的原理很簡單,就是從一個點開始附近像素點,填充成新的顏色,直到封閉區域內的所有像素點都被填充新顏色為止。泛紅填充實現最常見有四鄰域像素填充法,八鄰域像素填充法,基于掃描線的像素填充方法。根據實現又可以分為遞歸與非遞歸(基于棧)。所謂的floodFill 漫水填充就是在一張圖片中,和種子點像素相差在[-loDiff,+upDiff]的時候就用newVal來填充這個點。
def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None):1.操作的圖像,
2.掩碼,
3.起始像素值, #我們指定的第一個點的三個通道值
4.填充的顏色,
5.填充顏色的低值, 參數3的三通道值 減去 參數5 #低值三通道
6.填充顏色的高值 , 參數3的三通道值 加上 參數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才進行填充,默認mask是單通道的,通道數1可寫可不寫mask[101:301, 101:301] = 0 #加一的原因是mask[h+2,w+2],imge原來的ROI區域對應的是mask[+1,+1]的區域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()
運行結果:
彩色填充
二值填充
總結
以上是生活随笔為你收集整理的OpenCV+python:ROI与泛洪填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法及其复杂度度量简介
- 下一篇: 过度减肥会引起卵巢早衰吗