Zoh*_*aib 3 python opencv image image-processing computer-vision
我用固定相机拍摄了同一场景的多张图像,其中有移动物体。我不明白如何在 Python 中使用这些图像通过删除所有移动对象来检索背景图像。
任何帮助,将不胜感激。谢谢!
下面附上了图片:
在这种情况下,我希望最终的图像没有任何人参与。
图像1:
图像2:
图 3:
更新答案
我想出了如何在 Python 中执行我在下面建议的操作 - 但可能有更好的方法 - 我仍然是 Python 初学者!
#!/usr/bin/env python3
import numpy as np
from PIL import Image
# Load images
im0 = np.array(Image.open('1.jpg'))
im1 = np.array(Image.open('2.jpg'))
im2 = np.array(Image.open('3.jpg'))
# Stack the 3 images into a 4d sequence
sequence = np.stack((im0, im1, im2), axis=3)
# Repace each pixel by mean of the sequence
result = np.median(sequence, axis=3).astype(np.uint8)
# Save to disk
Image.fromarray(result).save('result.png')
Run Code Online (Sandbox Code Playgroud)
原答案
最简单的方法是取 3 个图像中每个像素的中值,因为没有手的 2 个图像将具有彼此接近的值,而有手的图像将是异常值,中值滤波器将删除异常值。
所以,我并不是说你查看每张图像的 3x3 或 5x5 区域并计算中值。相反,我的意思是查看pixel[0,0]图像 1、2 和 3 并取这三个值的中位数 - 您可以通过将 3 个值按顺序排序并选择三个已排序像素的中间值作为输出值来实现。然后查看pixel[0,1]所有 3 个图像并重复该过程。
这是结果:
我没有写 Python,我只是在终端中对ImageMagick做了完全相同的事情,如下所示:
convert 1.jpg 2.jpg 3.jpg -evaluate-sequence median result.jpg
Run Code Online (Sandbox Code Playgroud)
为了让您看到我在做什么,如果我计算每个位置的 3 个像素的平均值/平均值,而不是中值,则手将仅以其原始密度的 1/3 显示:
| 归档时间: |
|
| 查看次数: |
2223 次 |
| 最近记录: |