gpt4 book ai didi

python - 如何使用python删除图像中人物周围的白色边框/边缘?

转载 作者:行者123 更新时间:2023-12-02 16:12:18 27 4
gpt4 key购买 nike

我要删除黑色蒙版和人体图像之间的白色边框

图像输入示例:

enter image description here

厚度为1的图像输出:

enter image description here

厚度为2的图像输出:

enter image description here

我尝试了一些在这里找到的具有模糊和阈值的游戏
我还使用此代码查找和绘制轮廓

    thickness = 3
image = cv2.imread('../finetune/22.png')
blank_mask = np.zeros(image.shape, dtype=np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cnts = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

cv2.drawContours(image, cnts, -1, (255,0,0), thickness)
cv2.imshow('image', image)
cv2.imwrite('../finetune/22-'+str(thickness)+'r.png',image)
cv2.waitKey()

但是我发现的轮廓是黑色蒙版边缘而不是白线
我使用了厚度,效果很好,但是在每幅图像上,该轮廓都是不同的,整个图中的厚度也不相等

删除它的最佳精确方法是什么?

最佳答案

这是两种方法:

方法#1: cv2.erode()

您可以使用侵 eclipse 来侵 eclipse 白色前景对象的边界。本质上,该想法是使用内核执行2D卷积。可以使用 cv2.getStructuingElement() 创建内核,您可以在其中传递要创建的所需内核的形状和大小。典型的内核是cv2.MORPH_RECTcv2.MORPH_ELLIPSEcv2.MORPH_CROSS。如果内核下的所有像素均为1,则内核会在图像中滑动,其中一个像素被视为1,否则会侵 eclipse 为0。最终结果是,将根据内核的形状和大小丢弃边界上的所有像素。前景的厚度会减小,可用于消除小的白噪声或分离物体。您可以根据要执行的迭代次数来调整侵 eclipse 的强度。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
erode = cv2.erode(image, kernel, iterations=1)

方法#1:使用 cv2.morphologyEx() 打开

与侵 eclipse 相反的是扩张,可以增强图像。通常,在腐 eclipse 后执行拨号以“标准化”形态操作的效果。 OpenCV将这些步骤组合成一个称为形态学打开的操作。开孔只是腐 eclipse 然后扩张的别称,与仅腐 eclipse 相比,开放通常会给您更平滑的结果。
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

结果

enter image description here

您可以试验内核形状和迭代次数。要删除更多的噪声,请增加内核大小和迭代次数,而要删除更少的噪声,请减少内核大小和迭代数。
import cv2

image = cv2.imread('1.png')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, iterations=3)

cv2.imshow('opening', opening)
cv2.waitKey()

关于python - 如何使用python删除图像中人物周围的白色边框/边缘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com