如何去除图像的背景
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 颜色来提取暗像素 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
我想去掉下图中的六边形
加载图像文件后(我使用了 vedo
库),我不太确定下一步该怎么做。
我想去除六角形单元格,然后将图像二值化(即将背景中的六角形单元格转换为白色像素)以提取网络。
from vedo import *
from skimage.io import imread
if __name__ == '__main__':
f = os.path.join("input.png")
raw = load(f)
show(raw)
关于如何删除背景中的六边形单元格的建议将非常有用。
一种可能的解决方案是通过将图像转换为 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