计算机视觉Opencv3实验笔记(4)——ROI与泛洪填充

一、ROI与泛洪填充

    ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域。

本例程是通过对图片Numpy数据进行ROI的获取

    泛洪填充:从一个点开始附近像素点,填充成新的颜色,直到封闭区域内的所有像素点都被填充新颜色为止。

二、实验案例分析

2.1 ROI处理

此类操作相对比较简单,类似于抠图处理

src = cv.imread("C:\\0-MyWork\\opencv-python\\lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
face = src[180:390, 200:400]   #以左上角为0点,第一列表示向下纵轴,第二列表示向右横轴
gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY)   #转化成为gray灰度图
cv.imshow("face", gray)
backface = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
src[180:390, 200:400] = backface
cv.imshow("fullface-after", src)

2.2 洪泛处理

代码:

import cv2 as cv
import numpy as np


def fill_color_demo(image):   #洪泛处理彩色图片
    copyImg = image.copy()
    h, w = image.shape[:2] #得到图片的宽高度
    mask = np.zeros([h+2, w+2], np.uint8)  #API要求必须要+2,这样能处理所有像素边缘
    cv.floodFill(copyImg, mask, (430, 430), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo", copyImg)


def fill_binary():            #洪泛处理灰度图片
    image = np.zeros([400, 400, 3], np.uint8)   #得到一张黑色图片
    image[100:300, 100:300, : ] = 255    #将中间矩形刷白
    cv.imshow("fill_binary", image)

    mask = np.ones([402, 402, 1], np.uint8)   
    mask[151:301, 151:301] = 0   #经过两步处理,得到一个Mask图片
    cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("filled binary", image)

print("--------- Hello Python ---------")
src = cv.imread("C:\\0-MyWork\\opencv-python\\lena.png")
fill_color_demo(src)
fill_binary()
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
cv.waitKey(0)
cv.destroyAllWindows()

计算机视觉Opencv3实验笔记(4)——ROI与泛洪填充_第1张图片

以上代码重点分析以下函数:

cv.floodFill(image, mask, (430, 430), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)

 cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY)

以上两个函数的前三个参数:

1-image:为需要进行洪泛处理的图片;

2-mask:表示为掩图,其作用见对上述矩形的处理;

3-(430, 430)或(200, 200):表示种子数据,即选中的像素点位置;

4-(0, 255, 255)或(100, 2, 255):表示填充的颜色;

5-(100, 100, 100)与 (50, 50, 50):表示低、高的三通道范围。例如第一个函数中, (430, 430)这个位置的像素点(x,y,z),即像素范围在(x-100,y-100,z-100)到(x+50,y+50,z+50)全部被填充。

6-cv.FLOODFILL_FIXED_RANGE:泛洪填充,改变图像;

     cv.FLOODFILL_MASK_ONLY:不改变图像,只填充掩遮罩本身。

说明:本无法博文及后续本专栏文章代码与测试文件下载地址为:

链接:https://pan.baidu.com/s/1BeZkXoCAn_AFRkyXcI8dMQ 
提取码:aze2 

注:更多资源及软件请W信关注“学娱汇聚门

你可能感兴趣的:(人工智能,数据挖掘,python,opencv,python,人工智能,计算机视觉,ROI)