图像分割——漫水填充法 python-opencv

简介: 图像分割——漫水填充法 python-opencv

前言




在这里我们不硬啃原理(原理可参考Opencv[人民邮电出版社出版])。



一.漫水填充法原理




    漫水填充法是图像处理中进行图像分割的重要方法,其原理是根据像素灰度值之间的差值寻找相同区域以实现分割。




二. 漫水填充法的步骤




2.1 选择种子点(x,y)


2.2 以种子点为中心,判断 4-邻域或者8-邻域的像素值与种子点像素值的差值,将差值小于阈值的像素点添加进区域内


2.3 将新加入的像素点作为新的种子点,反复执行第二步,直到没有新的像素点被添加进该区域为止\




三.参数解析:


floodFill(image,
           mask,
           seedPoint,
           newVal,
           loDiff=None,
           upDiff=None, 
           flags=None)


image: 可以是单通道或三通道


mask:  掩码矩阵,尺寸比输入图像宽和高各大2的单通道图像,用于标记填充区域。


seedPoint: 种子点


newVal: 归入种子点区域的最小矩阵


loDiff: 添加进种子点区域条件的下界差值


upDiff:  添加种子点区域条件的上界差值,当种子点像素值与邻域某像素点的像素值的差值小于该值时,该像素点被添加进种子点所在的区域


flags:漫水填充法的操作标志。



四.设计步骤


4.1 读取图像


4.2 生成随机数,用于随机生成像素


4.3 确定连通域方式


4.4 掩码图像的数值


4.5 设置于选中像素点的差值


4.6 随机产生图像中的某一点像素


4.7 彩色图像中填充的像素值


4.8 漫水填充函数\



五.demo


程序和设计步骤中有部分出入,单还是可以完成。


import random
import cv2 as cv
import numpy as np
# 
def fill_image(image):
    copyImage = image.copy()  # 复制原图像
    h, w = image.shape[:2]  # 读取图像的宽和高
    mask = np.zeros([h + 2, w + 2], np.uint8)  # 新建图像矩阵  +2是官方函数要求
    px = random.randint(0, h)
    py = random.randint(0, w)
    print("px", px, "py", px)
    cv.floodFill(copyImage, mask, (px, py), (255, 0, 0), (100, 100, 50), (50, 50, 50),
                 flags=4 | (255 << 8) | cv.FLOODFILL_FIXED_RANGE)
    mask_copy = mask[1:h + 1, 1:w + 1]  # 把掩码中的数值取出来大小和原图一样,这样才能和原图进行运算,注意掩码的取值范围从1到h/w+1
    mask_copy = cv.merge([mask_copy, mask_copy, mask_copy])  # 要进行图像操作通道数目要一致,用merge函数合并出一个三通道图像
    src = cv.bitwise_and(image, mask_copy)  # 两个图像相与,mask中非标记区域为0与出来的结果也是0,起到屏蔽作用
    cv.namedWindow("fill", cv.WINDOW_NORMAL)
    cv.imshow("fill", copyImage)  # 显示填充过后的图像
    cv.namedWindow("and", cv.WINDOW_NORMAL)  #
    cv.imshow("and", image)
    return src
src = cv.imread("0.jpg")  # 读取图片
cv.namedWindow("raw", cv.WINDOW_NORMAL)  # 设置框体大小和名字
cv.imshow("raw", fill_image(src))
cv.waitKey(0)
cv.destroyAllWindows()

image.png


相关文章
|
1月前
|
算法 计算机视觉
OpenCV(四十一):图像分割-分水岭法
OpenCV(四十一):图像分割-分水岭法
45 0
|
1月前
|
算法 计算机视觉
OpenCV(四十):图像分割—漫水填充
OpenCV(四十):图像分割—漫水填充
76 0
|
1月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
63 0
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
|
1月前
|
数据采集 数据挖掘 Python
【Python DataFrame专栏】讲解DataFrame中缺失值的处理方法,包括填充、删除和插值技术。
【5月更文挑战第20天】在Python的Pandas库中处理DataFrame缺失值,包括查看缺失值(`isnull().sum()`)、填充(`fillna()`:固定值、前向填充、后向填充)、删除(`dropna()`:按行或列)和插值(`interpolate()`:线性、多项式、分段常数)。示例代码展示了这些方法的使用。
【Python DataFrame专栏】讲解DataFrame中缺失值的处理方法,包括填充、删除和插值技术。
|
15天前
|
存储 算法 数据挖掘
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
|
1月前
|
存储 安全 数据库
自动化密码填充:使用Python提高日常工作效率
自动化密码填充:使用Python提高日常工作效率
38 0
|
1月前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】
|
8月前
|
缓存 API 计算机视觉
OpenCV-实现天空变换(图像分割)
OpenCV-实现天空变换(图像分割)
149 0
|
8月前
|
数据可视化 Python
【100天精通Python】Day64:Python可视化_Matplotlib绘制误差线图、填充图、堆叠面积图,示例+代码
【100天精通Python】Day64:Python可视化_Matplotlib绘制误差线图、填充图、堆叠面积图,示例+代码
169 0
|
1月前
|
Python
python中填充而不是删除缺失值
python中填充而不是删除缺失值
33 1

热门文章

最新文章