zoukankan      html  css  js  c++  java
  • 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.填充的方法

     

  • 相关阅读:
    【CH6801】棋盘覆盖
    【模板】二分图匹配
    【POJ3683】Priest John's Busiest Day
    【Asia Yokohama Regional Contest 2018】Arithmetic Progressions
    【POJ2230】Watchcow
    【CF263D】Cycle in Graph
    【CF131D】Subway
    【洛谷P2709】小B的询问
    【模板】2-SAT
    【模板】矩阵快速幂
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9261056.html
Copyright © 2011-2022 走看看