python颜色填充函数_【图像后处理】python+OpenCV填充孔洞

本文详细介绍了如何使用Python和OpenCV库填充图像分割后的孔洞问题。通过floodFill函数实现单类和多类图像的孔洞填充,并提供了处理特定大小孔洞的解决方案,以优化分割结果。
摘要由CSDN通过智能技术生成

我们在进行图像分割后,分割结果有时会有一些小孔洞,如图1所示,其中黑白两色表示两种不同的类别。一般情况下,这些孔洞属于错分情况,为了优化结果,我们通常对这些孔洞进行填充。今天我们就用python语言基于OpenCV实现孔洞填充。图1 有孔洞的分割图像

我们要用到的函数是OpenCV里的floodFill函数。使用floodFill函数可以得到只标记孔洞的像素矩阵(孔洞值为0,非孔洞值为指定值)。有了孔洞的位置填充孔洞就容易多了。python代码如下。

import cv2

import numpy as np

'''图像说明:图像为二值化图像,255白色为目标物,0黑色为背景要填充白色目标物中的黑色空洞'''

def FillHole(imgPath,SavePath):

im_in = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE);

cv2.imwrite("im_in.png",im_in)

# 复制 im_in 图像

im_floodfill = im_in.copy()

# Mask 用于 floodFill,官方要求长宽+2

h, w = im_in.shape[:2]

mask = np.zeros((h+2, w+2), np.uint8)

# floodFill函数中的seedPoint对应像素必须是背景

isbreak = False

for i in range(im_floodfill.shape[0]):

for j in range(im_floodfill.shape[1]):

if(im_floodfill[i][j]==0):

seedPoint=(i,j)

isbreak = True

break

if(isbreak):

break

# 得到im_floodfill 255填充非孔洞值

cv2.floodFill(im_floodfill, mask,seedPoint, 255)

# 得到im_floodfill的逆im_floodfill_inv

im_floodfill_inv = cv2.bitwise_not(im_floodfill)

# 把im_in、im_floodfill_inv这两幅图像结合起来得到前景

im_out = im_in | im_floodfill_inv

# 保存结果

cv2.imwrite(SavePath, im_out)

填充结果如图2所示,三个孔洞均被填充。图2 填充结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值