gpt4 book ai didi

python - 如何使用 numpy 为图像的所有相对白色部分创建蒙版?

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

假设我有 2 个在某些未知位置“脏”的白色图像(RGB 800x600 图像),我想创建一个包含两个图像的所有脏部分的最终组合图像。
只需将图像添加在一起就可以减少每个 blob 的“脏度”,因为我将像素值减半,然后添加它们(保持在 0-> 255 rgb 范围内),当您有超过 2 个图像时,这会被放大。
我想要做的是为 3 channel 图像中所有相对白色的像素创建一个蒙版,我已经看到,如果所有 RGB 值都在彼此之间的 10-15 范围内,则一个像素是相对白色的。我将如何使用 numpy 创建这个掩码?
我想做的伪代码:

img = cv2.imread(img) #BGR image
mask = np.where( BGR within 10 of each other)
然后我可以使用第一张图片,并替换第二张图片没有被遮盖的像素,保持“脏度级别”相对脏。 (我知道第二张图片的一些脏污会取代第一张,但没关系)
编辑:
人们要求提供图像,因此我创建了一些示例图像,白色并不总是像这些示例中那样完全白色,这就是为什么我需要使用“10 BGR 以内”范围的原因。
图 1
Image 1
图 2
Image 2
图3(合并,忽略图2到这里黄色 Blob 的区别,应该是一样的)
Image 3

最佳答案

您要求的是具有颜色之间距离小于 10 的像素。
在这里,翻译成 numpy。

img = cv2.imread(img) #  assuming rgb image in naming
r = img[:, :, 0]
g = img[:, :, 1]
b = img[:, :, 2]
rg_close = np.abs(r - g) < 10
gb_close = np.abs(g - b) < 10
br_close = np.abs(b - r) < 10

all_close = np.logical_and(np.logical_and(rg_close, gb_close), br_close)
然而,我相信这不是你真正想要的。
我认为您在分割背景的蒙版中想要什么。
这实际上更简单,假设背景是完全白色的:
img = cv2.imread(img)
background_mask = 245 * 3 < img[: ,: ,0] + img[: ,: ,1] + img[: ,: ,2]
请注意此代码需要阈值游戏,并且仅显示一个概念。

关于python - 如何使用 numpy 为图像的所有相对白色部分创建蒙版?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63935283/

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