用另一个图像替换图像中的像素

时间:2015-02-24 13:26:38

标签: image

我想将(图像1)的黑色像素替换为另一个图像,因此结果看起来像图像2

图片1

http://imgur.com/xCLqxbi

图像2(结果)

http://imgur.com/ALiX0fU

有没有办法用pref PHP或Javascript来管理它?

1 个答案:

答案 0 :(得分:0)

当然,我正在使用Imagemagick的命令行,但也有PHP绑定。 ImageMagick安装在大多数Linux版本中,适用于Windows和OS X.

命令是这样的:

convert base.gif wallpaper.png -fx "u.r<0.1 && u.g<0.1 &&u.b<0.1? v : u" out.png

使用您的基本图片和我回答的其他问题的一些壁纸。

基本上,-fx运算符允许您自己进行处理。因此,我说如果原始图像的红色通道小于10%(即非常暗),并且绿色和蓝色,则将像素替换为来自第二图像(壁纸)的对应像素。第一图像的像素被称为u而第二图像(壁纸)的像素被称为v。因此u.r指的是第一张图像像素的红色成分。

enter image description here

你可以得到一个小小的发烧友,避免像冰箱门下面和地毯后墙左下方的异常值和孤独的像素。在这里,我将第三个图像引入到处理中,它是原始的副本,但我然后将其阈值和中值滤波器以减少异常值。命令的第一行对应于基本图像,第二行对应于过滤的基本图像,第三行对应于壁纸。我现在将基本图像的像素称为u[0],将过滤后的基本图像的像素称为u[1],将壁纸的像素称为u[2]

convert base.gif                                     \
   \( base.gif -depth 8 -threshold 1 -median 3x3 \)  \
   wallpaper.png                                     \
   -fx "u[1].r==0.0 ? u[2]:u[0]"                     \
   out.png

如果您要处理大量图像,可能会发现-fx运算符速度很慢,因此您可以这样做。首先通过阈值处理和中值滤波来制作黑色区域的漂亮掩模以去除异常值。

convert base.gif -depth 8 -threshold 1 -median 3x3 -negate mask.png

enter image description here

现在拍摄壁纸并使用蒙版遮罩其不透明度,然后将结果合成到基本图像上:

convert wallpaper.png                   \
        mask.png                        \
       -compose copyopacity -composite  \
        base.gif                        \ 
       -compose dstover -composite      \
        result.png