【问题标题】:is there a way to use imagemagick or another graphics library to filter and image based on the pixels in another image有没有办法使用 imagemagick 或其他图形库根据另一个图像中的像素进行过滤和图像
【发布时间】:2023-03-15 12:07:01
【问题描述】:

所以我编写了一个程序来执行此操作,但它需要很长时间才能执行。我注意到很多图形库的执行速度似乎比我编写的代码要快。基本上我想要做的是使用第二个图像过滤第一个图像中的像素。如果它们不匹配,请用黑色替换它们。我只想能够看到图像中的墙。

【问题讨论】:

  • 您使用什么语言?如果你逐个像素地做,事情会很慢,但是周围有一些库可以一次处理整个数组。
  • 哈哈,Java。是的,那很愚蠢。我确实是逐个像素地做的;
  • 嗯?你怎么能在 600 像素高的建筑物的照片中找到 1286 像素高的墙?为什么一张图片是无损 PNG 而另一张图片是有损 JPEG - 它们也永远不会匹配?

标签: image image-processing imagemagick


【解决方案1】:

在 ImageMagick 中,您可以在将颜色限制为 255 后从 image2 中提取唯一 (srgb) 颜色。然后您可以循环遍历每种颜色并让它在第一张图像中用白色填充该颜色,并用黑色填充所有其他颜色.这会生成一个蒙版图像,可以将其与 image1 相乘以生成您的结果。根据需要调整模糊值。

colors=`convert image2.jpg -fuzz 10% +dither -colors 255 -unique-colors txt: | cut -d\  -f6`
list=""
for color in $colors; do
val="-fill white -opaque '$color'"
list="$list $val"
done
eval 'convert image1.png -fuzz 1% '$list' -fill black +opaque white mask.png'
convert image1.png mask.png -compose multiply -composite result.png


【讨论】:

  • 我已经取得了一些进展。我通过在语句的末尾添加 \ 来运行脚本,但是我得到的图像的定义要少得多。基本上只是建筑物的中心线。
  • 您的 ImageMagick 版本、日期和平台/操作系统是什么?您是否在第一个命令行中为颜色 = 使用了反引号,在 eval 行中使用了单引号?您是否使用发布的完全相同的图像。请注意,您的第二张图片是 JPG 并且有损压缩。
猜你喜欢
  • 2014-04-23
  • 2019-06-28
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-05-21
  • 2018-10-25
  • 2021-03-22
相关资源
最近更新 更多