python實現圖片的ROI(region of interest)和泛洪填充


目錄:

(一)ROI操作

(1)獲取感興趣區域
(2)還原操作

(二)泛洪填充floodFill

 

 

 

正文:

(一)ROI操作

感興趣區(Region of Interest,ROIs) 是圖像的一部分,
它通過在圖像上選擇或使用諸如設定閾值(thresholding) 或者從其他文件(如矢量> 轉換獲得等方法生成。
感趣區可以是點、線、面不規則的形狀,通常用來作為圖像分類的樣本、掩膜、裁剪區或及其他操作。
原理通過操作圖像矩陣來獲取或合並指定位置的圖像,
(1)獲取感興趣區域
1 src = cv.imread("./1.png")  #讀取圖片
2 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
3 cv.imshow("input image",src)    #通過名字將圖像和窗口聯系
4 print(src.shape)
5 flower = src[200:400,100:250]
6 cv.imshow("flower",flower)

(2)還原操作

 1 src = cv.imread("./1.png")  #讀取圖片
 2 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
 3 cv.imshow("input image",src)    #通過名字將圖像和窗口聯系
 4 print(src.shape)
 5 flower = src[200:400,100:250]
 6 cv.imshow("flower",flower)
 7 gray = cv.cvtColor(flower,cv.COLOR_BGR2GRAY)  #獲取一張灰度圖像,單一通道
 8 backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)  #單一通道轉3通道
 9 src[200:400,100:250] = backface
10 cv.imshow("new image",src)
11 cv.waitKey(0)   #等待用戶操作,里面等待參數是毫秒,我們填寫0,代表是永遠,等待用戶操作
12 cv.destroyAllWindows()  #銷毀所有窗口

此時圖片會失真,再如:

 1 # -*- coding=GBK -*-
 2 import cv2 as cv
 3 import numpy as np
 4  
 5  
 6 #截取圖片中的指定區域或在指定區域添加某一圖片
 7 def jie_image(src1):
 8     src2 = src1[5:89, 500:630]#截取第5行到89行的第500列到630列的區域
 9     cv.imshow("截取", src2)
10     src1[105:189, 300:430] = src2#指定位置填充,大小要一樣才能填充
11     cv.imshow("合成", src1)
12  
13 src = cv.imread("C://1.jpg")
14 cv.imshow("原來", src)
15 jie_image(src)
16 cv.waitKey(0)
17 cv.destroyAllWindows()

 (二)泛洪填充floodFill

 1 def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None): # real signature unknown; restored from __doc__ 

通俗解釋:floodFill( 1.操作的圖像, 2.掩模, 3.起始像素值,4.填充的顏色, 5.填充顏色的低值, 6.填充顏色的高值 ,7.填充的方法)

所謂的floodFill 漫水填充就是在一張圖片中,和種子點像素相差在[-loDiff,+upDiff]的時候就用newVal來填充這個點。

1 1.操作的圖像, 
2 2.掩碼, 
3 3.起始像素值,  #我們指定的第一個點的三個通道值
4 4.填充的顏色, 
5 5.填充顏色的低值,   #低值三通道
6 6.填充顏色的高值 ,  #高值三通道
7 7.填充的方法

1 參數5.填充顏色的低值就是:參數3的三通道值 減去 參數5

2 參數6.填充顏色的高值就是:參數3的三通道值 加上 參數6 

1 7.填充的方法

2 彩色圖像一般是FLOODFILL_FIXED_RANGE 指定顏色填充

4 還有一種是FLOODFILL_MASK_ONLY,mask的指定的位置為零時才填充,不為零不填充 

(1)彩色圖片

1 def fill_color_demo(image):
2     copyImg = image.copy()
3     h, w = image.shape[:2]
4     mask = np.zeros([h+2, w+2], np.uint8)
5     cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
6     cv.imshow("fill_color_demo", copyImg)

(2)二進制圖片

FLOODFILL_MASK_ONLY我們可以自定義填充圖像,掩碼為1不填充,為0進行填充

1 def fill_binary():
2     image = np.zeros([400,400,3],np.uint8)
3     image[100:300,100:300,:]=255
4     cv.imshow("fill_banary",image)
5 
6     mask = np.ones([402,402,1],np.uint8)
7     mask[101:301,101:301] = 0  #這里設置需要加1--->101:301  這是我們填充的圖像掩碼為0
8     cv.floodFill(image,mask,(200,200),(0,255,0),cv.FLOODFILL_MASK_ONLY)  #最好寫到我們填充的圖像中間
9     cv.imshow("fill_banary2",image)
1.操作的圖像, 
2.掩碼, 為1不填充,為0才進行填充
3.填充圖像的中央部分 4.填充的顏色,
5.填充的方法

 

 參考:

https://www.cnblogs.com/ssyfj/p/9261056.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM