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()
## 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()