- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如何将一个函数应用于相同分辨率的两个图像的相应像素?就像 Photoshop 在用另一层覆盖一层时所做的那样。如果超过两张图片呢?
如果它是 Wolfram Mathematica,我会获取这些图像的列表并将它们转置以获得单个“图像”,其中每个“像素”将是一个 N 像素的数组——我会应用一个 Mean[ ]
函数。
但是我该如何处理 vips 呢?有这么多Vips::Image方法只有here我可以找到一些关于它们的含义的最小描述。例如:
images = Dir["shots/*"].map{ |i| Vips::Image.new_from_file(i) }
ims = images.map(&:bandmean)
(ims.inject(:+) / ims.size).write_to_file "temp.png"
我希望它的意思是“计算平均图像”,但我不确定我在这里做了什么。
最佳答案
ruby-vips8 带有一个 complete set of operator overloads ,所以你可以只对图像进行算术运算。它还会自动消除公共(public)子表达式,因此您无需在排序或分组时过于小心,您只需编写一个等式即可,它应该运行良好。
在你的例子中:
require 'vips8'
images = Dir["shots/*"].map{ |i| Vips::Image.new_from_file(i) }
sum = images.reduce (:+)
avg = sum / images.length
avg.write_to_file "out.tif"
+-*/带有一个常量总是会生成一个 float 图像,因此您可能希望在保存之前将结果转换为 uchar(或者可能是 ushort?),否则您将得到一个巨大的输出 tiff。你可以这样写:
avg = sum / images.length
avg.cast("uchar").write_to_file "out.tif"
默认情况下,new_from_file
打开图像进行随机访问。如果您的源图像是 JPG 或 PNG,这将涉及在处理开始之前将它们完全解压缩到内存(如果它们非常大,则解压缩到磁盘临时文件)。
在这种情况下,您只需要在写入结果时从上到下扫描输入图像,这样您就可以通过系统流式传输图像。将 new_from_file
更改为:
images = Dir["shots/*"].map { |i| Vips::Image.new_from_file(i, :access => "sequential") }
提示您将只按顺序使用图像像素,您应该会看到内存和 CPU 使用率有明显下降。
PNG 是一种非常慢的格式,如果可能我会使用 tiff。
您可以尝试使用 bandrank
这类似于对一组图像进行中值过滤:你给它一个图像数组,在每个像素位置,它按像素值对图像进行排序,然后选择第 N 个。这是一种非常有效的去除暂时性伪影的方法。
您可以使用条件
.ifthenelse
(then, else)
来计算更复杂的函数。例如,要将所有大于其局部平均值的像素设置为等于局部平均值,您可以这样写:
(image > image.gaussblur(1)).ifthenelse(image.gaussblur(1), image)
你可能很好奇vips是如何执行上面的程序的。代码:
(images.reduce(:+) / images.length).cast("uchar")
将构建一个图像处理操作流水线:一系列 vips_add()
对数组求和,然后是 vips_linear()
做除法,最后一个vips_cast()
把它敲回uchar。
当您调用 write_to_file
时,您机器上的每个核心都将获得管道的副本,并且它们将排队处理来自解压器的源图像中的图 block 。每次完成一行输出图 block 时,后台线程将使用选定的图像写入库(在我的示例中为 libtiff)将这些扫描线发送回磁盘。
您应该会看到低内存使用率和良好的 CPU 利用率。
关于ruby - 使用 vips (ruby-vips8) 合并多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972622/
我正在尝试学习 Knockout 并尝试创建一个照片 uploader 。我已成功将一些图像存储在数组中。现在我想回帖。在我的 knockout 码(Javascript)中,我这样做: 我在 Jav
我正在使用 php 编写脚本。我的典型问题是如何在 mysql 中添加一个有很多替代文本和图像的问题。想象一下有机化学中具有苯结构的描述。 最有效的方法是什么?据我所知,如果我有一个图像,我可以在数据
我在两个图像之间有一个按钮,我想将按钮居中到图像高度。有人可以帮帮我吗? Entrar
下面的代码示例可以在这里查看 - http://dev.touch-akl.com/celebtrations/ 我一直在尝试做的是在 Canvas 上绘制 2 个图像(发光,然后耀斑。这些图像的链接
请检查此https://jsfiddle.net/rhbwpn19/4/ 图像预览对于第一篇帖子工作正常,但对于其他帖子则不然。 我应该在这里改变什么? function readURL(input)
我对 Canvas 有疑问。我可以用单个图像绘制 Canvas ,但我不能用单独的图像绘制每个 Canvas 。- 如果数据只有一个图像,它工作正常,但数据有多个图像,它不工作你能帮帮我吗? va
我的问题很简单。如何获取 UIImage 的扩展类型?我只能将图像作为 UIImage 而不是它的名称。图像可以是静态的,也可以从手机图库甚至文件路径中获取。如果有人可以为此提供一点帮助,将不胜感激。
我有一个包含 67 个独立路径的 SVG 图像。 是否有任何库/教程可以为每个路径创建单独的光栅图像(例如 PNG),并可能根据路径 ID 命名它们? 最佳答案 谢谢大家。我最终使用了两个答案的组合。
我想将鼠标悬停在一张图片(音乐专辑)上,然后播放一张唱片,所以我希望它向右移动并旋转一点,当它悬停时我希望它恢复正常动画片。它已经可以向右移动,但我无法让它随之旋转。我喜欢让它尽可能简单,因为我不是编
Retina iOS 设备不显示@2X 图像,它显示 1X 图像。 我正在使用 Xcode 4.2.1 Build 4D502,该应用程序的目标是 iOS 5。 我创建了一个测试应用(主/细节)并添加
我正在尝试从头开始以 Angular 实现图像 slider ,并尝试复制 w3school基于图像 slider 。 下面我尝试用 Angular 实现,谁能指导我如何使用 Angular 实现?
我正在尝试获取图像的图像数据,其中 w= 图像宽度,h = 图像高度 for (int i = x; i imageData[pos]>0) //Taking data (here is the pr
我的网页最初通过在 javascript 中动态创建图像填充了大约 1000 个缩略图。由于权限问题,我迁移到 suPHP。现在不用标准 标签本身 我正在通过这个 php 脚本进行检索 $file
我正在尝试将 python opencv 图像转换为 QPixmap。 我按照指示显示Page Link我的代码附在下面 img = cv2.imread('test.png')[:,:,::1]/2
我试图在这个 Repository 中找出语义分割数据集的 NYU-v2 . 我很难理解图像标签是如何存储的。 例如,给定以下图像: 对应的标签图片为: 现在,如果我在 OpenCV 中打开标签图像,
import java.util.Random; class svg{ public static void main(String[] args){ String f="\"
我有一张 8x8 的图片。 (位图 - 可以更改) 我想做的是能够绘制一个形状,给定一个 Path 和 Paint 对象到我的 SurfaceView 上。 目前我所能做的就是用纯色填充形状。我怎样才
要在页面上显示图像,你需要使用源属性(src)。src 指 source 。源属性的值是图像的 URL 地址。 定义图像的语法是: 在浏览器无法载入图像时,替换文本属性告诉读者她们失去的信息。此
**MMEditing是基于PyTorch的图像&视频编辑开源工具箱,支持图像和视频超分辨率(super-resolution)、图像修复(inpainting)、图像抠图(matting)、
我正在尝试通过资源文件将图像插入到我的程序中,如下所示: green.png other files 当我尝试使用 QImage 或 QPixm
我是一名优秀的程序员,十分优秀!