【问题标题】:Draw images with warped triangles on a web server在 Web 服务器上绘制带有扭曲三角形的图像
【发布时间】:2012-10-02 11:09:59
【问题描述】:

场景

我当前项目的 Flash 前端会生成 Web 服务器需要组合成视频的图像。帧速率和帧分辨率都足够大,以至于将图像序列发送到后端是不可行的(在时间和客户端带宽方面)。相反,我们也在尝试在后端重新创建图像绘图。

正确而缓慢,或错误而快速

问题在于这涉及到相当多的带纹理三角形的绘制,而我们在 Python 中找到的两个解决方案(herethere)效率非常低,以至于每帧绘制大约需要 60 秒,导致30 秒剪辑的处理时间高达 7.5 小时。不可接受。

当使用 PHP 模块向 ImageMagick 发送命令进行图像处理时,整个过程非常快(每帧十分之一秒),但是 ImageMagick seems to be unable to draw triangles 我们在前端这样做的方式,所以最后结果不匹配。不可接受。

我在这里要问的是,是否有人知道解决此问题的方法,以任何必要的方式在 Web 服务器上运行。

扭曲图像

先解释一下前端的流程:

  1. 对图像中的点执行 Delaunay 计算,以获得均匀分布的三角形网格。
  2. 偏移网格中的点/顶点,扭曲或扭曲图像。
  3. 在新位图上绘制扭曲的三角形。

我们可以将第 1 步和第 2 步的结果(坐标)发送到后端,然后绘制扭曲的三角形并将其保存到磁盘上的图像中(或作为帧附加到视频中)。但最后一步是我需要帮助的。

问题

是否有可以在位图中绘制三角形的 ImageMagick 替代品?是否有其他库,例如 C 库,可以让我们这样做?或者我们是否可以通过切换后端技术(如 Ruby)更轻松地实现这种效果? (不幸的是,.Net 和 Java 目前还不是真正的选择)

非常感谢。 EP。

附注我很感激重新标记的努力,我不太清楚在这个问题上贴什么标签。谢谢!

【问题讨论】:

  • 这不能通过html 5画布在客户端完成吗?
  • 没错,客户端部分可以在画布上完成,但是将 450 帧传送到服务器是问题所在。这就是为什么需要在服务器端绘制图像。
  • 也许我不明白,你想要做什么。你能描述一下这个系统从客户端到服务器的作用吗?还是应该做?
  • 服务器将收到 A) 源图像,B) 紫外线点列表,C) 组成三角形网格的紫外线指数列表。最后,D) 是与原始 UV 位置不同的点列表,当正确绘制时会导致图像/帧变形。最终会有很多这样的列表,每帧一个,但只要让服务器绘制一张图像就足够了。
  • 没有解决方案,但有一个建议:如果您在正确的图像中突出显示修改后的三角形,那么您一目了然您想要实现的目标。

标签: image-manipulation cgi imagemagick


【解决方案1】:

Opencv 是一个 c 库,支持多种类型的图像变形和合成。

【讨论】:

  • 嗨,埃里克,感谢您的发帖。我们上周确实刚刚解决了这个问题,使用 OpenCV 用 C 语言编写了我们自己的应用程序。它在 500 毫秒内以 480p 分辨率渲染图像帧,这对于我们的事业来说已经足够了。
【解决方案2】:

在双方使用相同的技术将获得最一致的结果和最简单的时间保持算法同步。如果你使用画布,你也可以在服务器上使用 nodecanvas 和 node.js 以同样的方式在服务器端进行图像生成。 (不必切换所有内容。您可以只运行一个变形服务器进程)

https://github.com/LearnBoost/node-canvas

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 2023-03-17
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多