在Web服务器上绘制带有扭曲三角形的图像

时间:2012-10-02 11:09:59

标签: image-manipulation cgi imagemagick

场景

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

正确和缓慢,或不正确和快速

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

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

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

变形图像

让我解释一下前端的过程:

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

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

    问题

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

    非常感谢。 EP。

    P.S。我很感激重新标记的努力,我不太清楚这个问题上的标签。谢谢!

2 个答案:

答案 0 :(得分:0)

在双方使用相同的技术将为您提供最一致的结果和最简单的时间保持算法同步。如果使用canvas,您还可以在服务器上使用nodecanvas和node.js以相同的方式在服务器端执行映像生成。 (不必切换所有东西。你可以运行一个变形服务器进程)

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

答案 1 :(得分:0)

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