我使用 U2NET 成功计算了图像的掩模,如下所示:
然而,正如我们所看到的,面具是not内部完全白色,并且在掩模外部(即左侧部分)也可以观察到一些不需要的伪影。
我正在尝试使用膨胀和腐蚀操作来解决上述两个问题,但我认为这是错误的方法,因为它不会产生预期的结果。
我正在做类似以下的事情,但没有解决问题:
from PIL import ImageFilter
dilation_img = image.filter(ImageFilter.MaxFilter(15))
erotion_img = dilation_img.filter(ImageFilter.MinFilter(15))
您可以使用 Otsu 算法对图像进行动态阈值处理。之后,您可以通过使用 OpenCV 轮廓在其上绘制来填充任何孔。我不确定 U2Net 在屏蔽时可以返回什么值范围,但您也可以手动设置一个小阈值 ~50。
import cv2
import numpy as np
# load image
img = cv2.imread("mask.jpg", cv2.IMREAD_GRAYSCALE);
# otsu thresholding
_, mask = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU);
# show
cv2.imshow("Mask", mask);
cv2.waitKey(0);
# close everything inside
contour, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE);
# get the biggest contour # returns _, contours, _ if using OpenCV 3
biggest_area = -1;
biggest = None;
for con in contour:
area = cv2.contourArea(con);
if biggest_area < area:
biggest_area = area;
biggest = con;
# fill in the contour
cv2.drawContours(mask, [biggest], -1, 255, -1);
# show
cv2.imshow("Filled Mask", mask);
cv2.waitKey(0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)