opencv学习笔记(7)ROI与泛洪填充

ROI

ROI:region of interest的缩写。

## coding=UTF-8
import numpy as np
import cv2 as cv
#读取一张图片
bili_png = cv.imread("D:/academic/picture/bili.png")
cv.namedWindow("bili_raw",cv.WINDOW_AUTOSIZE)
cv.imshow("bili_raw",bili_png)
#对图片“切片”
face = bili_png[20:400,100:400]
cv.imshow("face",face)
#变成灰度图,再转成彩图
gray = cv.cvtColor(face,cv.COLOR_RGB2GRAY)
backface = cv.cvtColor(gray,cv.COLOR_GRAY2RGB)
bili_png[20:400,100:400] = backface
cv.imshow("gray_picture",bili_png)
cv.waitKey(0)
cv.destroyAllWindows()

效果:

泛洪填充

注意:
1.必须要image.copy,如果直接copyImg=image,好像是会对原图直接进行处理来着。
2.mask的长、宽必须是原图长、宽+2,问我为什么?因为opencv就是这么规定的…
3.关于这段代码。

    copyImg,mask,(210,250),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE
    )

(210,250)是泛洪填充的起始位置,seedPoint
(0,255,255)是重绘像素区域的新的填充值(颜色),newVal
(100,100,100) 是loDiff,即当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值。
(50,50,50)是upDiff,即当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值。

## coding=UTF-8
import numpy as np
import cv2 as cv

def fill_color_demo(image):
    copyImg = image.copy()
    h,w = copyImg.shape[:2]
    copyImg[208:212,248:252] = (0,0,255) #标记一下起始位置
    mask = np.zeros([h+2,w+2],np.uint8)
    cv.floodFill(
    copyImg,mask,(210,250),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE
    )
    cv.imshow("copyImg",copyImg)


bili_png = cv.imread("D:/academic/picture/bili.png")
fill_color_demo(bili_png)
cv.waitKey(0)
cv.destroyAllWindows()

效果:opencv学习笔记(7)ROI与泛洪填充_第1张图片

## coding=UTF-8
import numpy as np
import cv2 as cv

def fill_binary():
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300, : ] = 255
    cv.imshow("fill_binary",image)
    h,w = image.shape[:2]
    
    mask = np.ones([h+2,w+2,1],np.uint8)
    mask[101:301,101:301]=0
    cv.floodFill(image,mask,(200,200),(100,2,255),cv.FLOODFILL_MASK_ONLY)
    cv.imshow("filled binary",image)


fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()

效果:
opencv学习笔记(7)ROI与泛洪填充_第2张图片

你可能感兴趣的:(opencv学习)