opencv(5)ROI与漫水填充
- ROI
首先,选择感兴趣的区域然后转换成gray但是gray是一通道的,我们需要把他转换成三通道的然后再重新赋值给原矩阵。程序完成.
import cv2 as cv
def roi_fill(img):
cv.imshow("img",img)
img_part = img[200:400,200:400,:]
g_1 = cv.cvtColor(img_part,cv.COLOR_BGR2GRAY)
backface = cv.cvtColor(g_1,cv.COLOR_GRAY2BGR)
img[200:400, 200:400,:] = backface
cv.imshow("gray_ROI",img)
def roi_fill2(img):
cv.imshow("img2", img)
img_part = img[200:400, 200:400, :]
g_1 = cv.cvtColor(img_part, cv.COLOR_BGR2GRAY)
img[200:400, 200:400,0] = g_1
img[200:400, 200:400, 1] = g_1
img[200:400, 200:400, 2] = g_1
cv.imshow("gray_ROI2", img)
if __name__ == "__main__":
img = cv.imread("leda.jpg")
roi_fill(img)
img = cv.imread("leda.jpg")
roi_fill2(img)
cv.waitKey(0)
cv.destroyAllWindows()
4. 漫水填充
loDif,当前观察象素值与其部件领域象素或者待加入该部件的种子象素之负差(Lower difference)的最大值。低于这个差距的不属于重绘区域
upDiff,当前观察象素值与其部件领域象素或者待加入该部件的种子象素之正差(upper difference)的最大值。高于这个差距的不属于重绘区域
主要还是填充函数 cv.floodFill(img,mask,(250,250),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
import cv2 as cv
import numpy as np
def fanhong(img):
cv.imshow("timg",img)
img_copy = img.copy()
h,w = img.shape[:2]
mask = np.zeros([h+2,w+2],np.uint8)
# 图像矩阵 掩模 种子像素(也就是填充起始点)填充颜色,与种子像素的下限loDif- 上限+ upDiff
# 最后一个参数 的意思是 那其他点与种子像素比大小如果满足上下限则填充
# 如果没有最后这个参数 默认与相邻像素相比较
# 最后一个 参数 也可以是mask_only 我还不会用
cv.floodFill(img,mask,(250,250),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
cv.imshow("timg2",img)
if __name__ == "__main__":
img = cv.imread("./timg.jpg")
fanhong(img)
cv.waitKey(0)
cv.destroyAllWindows()