import cv2;
import numpy as np;
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png',cv2.IMREAD_GRAYSCALE);#原始图像
cv2.imshow('img',img)
th,im=cv2.threshold(img,160,255,cv2.THRESH_BINARY_INV);#二值化阈值处理
im_floodfill=im.copy()
h,w=im_th.shape[:2]
mask=np.zeros((h+2,w+2),np.uint8)#图像边界填充
cv2.floodFill(im_floodfill,mask,(0,0),55)#图像泛洪填充
im_floodfill_inv=cv2.bitwise_not(im_floodfill)#按位非运算
im_out=im_th|im_floodfill_inv#图像合并
cv2.imshow("Foreground",im_out)
cv2.imshow("Thresholded Image", im_th)
cv2.imshow("Floodfilled Image", im_floodfill)
cv2.imshow("Inverted Floodfilled Image", im_floodfill_inv)
cv2.waitKey(0)
cv2.destroyAllWindows()
算法:图像多孔洞填充是使用简单的图像阈值来将边界与背景分开,即强度高于某个值(阈值)的像素是背景,其余像素是前景。虽然中心图像显示此阈值图像(黑色代表背景,白色代表前景),但是边界被很好地提取(它是纯白色)的同时,图像的内部也具有类似于背景的强度。通过从像素(0,0)执行填充操作来提取背景,不受泛洪填充操作影响的像素必然位于边界内,反转并与阈值图像组合的泛洪图像就是前景蒙版了,即白色填充圆形边界内的所有像素。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!