假设我有两个白色图像(RGB 800x600图像),在一些未知位置“脏”,我想创建一个最终的组合图像,其中包含两个图像的所有脏部分
只需将图像添加在一起就可以减少每个斑点的“脏度”,因为我将像素值减半,然后再添加它们(以保持在0->;255 rgb范围内),当有两个以上的图像时,这一点会被放大
我想做的是为3通道图像中所有相对白色的像素创建一个遮罩,我已经看到,如果所有RGB值彼此在10-15范围内,则一个像素相对白色。如何使用numpy创建此遮罩
我想做的事情的伪代码:
img = cv2.imread(img) #BGR image
mask = np.where( BGR within 10 of each other)
然后我可以使用第一幅图像,在第二幅图像未被遮罩的地方替换像素,保持“脏度级别”相对脏。(我知道第二张图片的肮脏程度会取代第一张,但没关系)
编辑: 人们要求图像,所以我创建了一些示例图像,白色不会总是像这些示例中那样完全是白色的,这就是为什么我需要使用“在10 BGR范围内”的图像
我建议您转换为HSV colourspace并查找以下饱和(彩色)像素:
请注意,如果它拾取的彩色像素太多或太少,则可以对其进行修改。如果吸得太少,你可能会放大面膜,如果吸得太多,你可能会腐蚀面膜。您还可以在掩蔽之前将图像模糊一点,这可能不是一个坏主意,因为这是一个带有压缩伪影的“讨厌的”JPEG。如果你只想让某些颜色通过,或者某个亮度或混合,你可以改变饱和度测试,使其更具临床意义和针对性
你所要求的是让颜色之间的距离小于10的像素
在这里,翻译成numpy
然而,我相信这不是你真正想要的
我想你想要的是分割背景的面具
这实际上更简单,假设背景是完全白色的:
请注意这段代码需要阈值游戏,并且只显示了一个概念
相关问题 更多 >
编程相关推荐