如何去除图像的背景

How to remove the background of an image

我想去掉下图中的六边形

加载图像文件后(我使用了 vedo 库),我不太确定下一步该怎么做。 我想去除六角形单元格,然后将图像二值化(即将背景中的六角形单元格转换为白色像素)以提取网络。

from vedo import *
from skimage.io import imread


if __name__ == '__main__':
    f = os.path.join("input.png")
    raw = load(f)
    show(raw)


image file (image source)

关于如何删除背景中的六边形单元格的建议将非常有用。

一种可能的解决方案是通过将图像转换为 CMYK 颜色来提取暗像素 space 并提取 K(基调 - 黑色)通道并对其进行阈值处理以实现二值图像。

手动计算K通道并使用固定值(在本例中为150)设置阈值。代码如下所示; Result

import cv2
import numpy as np


# get grayscale image
def get_grayscale(image):
    # Convert to float and divide by 255:
    imgFloat = image.astype(np.float64) / 255.

    # Calculate channel K:
    kChannel = 1 - np.max(imgFloat, axis=2)

    # Convert back to uint 8:
    kChannel = (255 * kChannel).astype(np.uint8)
    # Threshold image:
    binaryThresh = 150
    _, binaryImage = cv2.threshold(kChannel, binaryThresh, 255, cv2.THRESH_BINARY)

    return cv2.bitwise_not(binaryImage)


if __name__ == '__main__':
    image = cv2.imread("input.png")
    gray = get_grayscale(image)
    cv2.imshow("image", gray)
    cv2.waitKey(0)
    cv2.destroyAllWindows