繁体   English   中英

如何去除图像的背景

[英]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)


图片文件图片来源

关于如何去除背景中的六角形单元格的建议将非常有帮助。

一种可能的解决方案是通过将图像转换为 CMYK 颜色空间并提取 K(Key - black)通道并将其阈值化以实现二值图像来提取暗像素。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM