OpenCV---ROI(region of interest)和泛洪填充

一:ROI

感兴趣区(Region of Interest,ROIs) 是图像的一部分,
它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生成。
感趣区可以是点、线、面不规则的形状,通常用来作为图像分类的样本、掩膜、裁剪区或及其他操作。

(一)获取感兴趣区域

src = cv.imread("./1.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系
print(src.shape)
flower = src[200:400,100:250]
cv.imshow("flower",flower)

原图:

感兴趣区域:

还原操作:

src = cv.imread("./1.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系
print(src.shape)
flower = src[200:400,100:250]
cv.imshow("flower",flower)
gray = cv.cvtColor(flower,cv.COLOR_BGR2GRAY)  #获取一张灰度图像,单一通道
backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)  #单一通道转3通道
src[200:400,100:250] = backface
cv.imshow("new image",src)
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

二:泛洪填充floodFill

推文:图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

(一)

所谓的floodFill 漫水填充就是在一张图片中,和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal来填充这个点。
def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None): # real signature unknown; restored from __doc__
1.操作的图像, 
2.掩码, 
3.起始像素值,  #我们指定的第一个点的三个通道值
4.填充的颜色, 
5.填充颜色的低值,   #低值三通道
6.填充颜色的高值 ,  #高值三通道
7.填充的方法
参数5.填充颜色的低值就是:参数3的三通道值 减去 参数5
参数6.填充颜色的高值就是:参数3的三通道值 加上 参数6
7.填充的方法
彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充

还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充
def fill_color_demo(image):
    copyImg = image.copy()  #从源图像上克隆出一张新图像
    h,w = image.shape[:2]
    mask = np.zeros([h+2,w+2],np.uint8) #+2是为了使边缘像素也被修改
    print(image[30,30])  #[187 192 191]  用它进行操作的
    cv.floodFill(copyImg,mask,(30,30),(0,255,255),(50,50,50),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo",copyImg)
src = cv.imread("./1.png")  #读取图片
fill_color_demo(src)

(二)FLOODFILL_MASK_ONLY我们可以自定义填充图像,掩码为1不填充,为0进行填充

def fill_binary():
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:]=255
    cv.imshow("fill_banary",image)

    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301] = 0  #这里设置需要加1--->101:301  这是我们填充的图像掩码为0
    cv.floodFill(image,mask,(200,200),(0,255,0),cv.FLOODFILL_MASK_ONLY)  #最好写到我们填充的图像中间
    cv.imshow("fill_banary2",image)
fill_binary()
1.操作的图像, 
2.掩码, 为1不填充,为0才进行填充
3.填充图像的中央部分 4.填充的颜色, 5.填充的方法

 

猜你喜欢

转载自www.cnblogs.com/ssyfj/p/9261056.html