【问题标题】:Perspective Image Transformation with tiling平铺透视图像转换
【发布时间】:2011-08-09 11:16:51
【问题描述】:

正在寻找一个可以用于我计划创建的新应用程序的优秀图像处理库。我将使用 C#.NET (VS 2008)

我的应用程序需要执行以下操作:

  1. 在启动时加载图像并显示在图片框中
  2. 然后我应该能够在图片框中的任意位置选择四个点(TopLeft、TopRight、BottomLeft、BottomRight)。
  3. 然后我需要使用 4 个源点和目标点将源图像转换为正确的透视图。

不仅如此,我还需要最终输出图像具有指定大小。我希望应用程序能够使用相同的透视图并返回我指定的指定矩形大小(不是 4 点大小)的图像。我希望你明白我的意思。需要对源图像进行平铺和转换,以生成完全适合指定区域的输出。

我尝试了一些库,如 Aforge.NET、ImageMagick、EMGU 等。有些很慢。有些只能产生小尺寸的透视图像。有些给出内存错误。找不到合适的解决方案。

【问题讨论】:

    标签: c# image transform perspective


    【解决方案1】:

    您可能想看看这个,因为它可能会解决您的部分问题,或者引导您朝着正确的方向前进: http://www.codeproject.com/KB/graphics/YLScsFreeTransform.aspx

    它将使用您提供的 4 个 X/Y 坐标拍摄图像并对其进行扭曲。

    快速、免费、简单的代码。经过测试,它工作得很好。只需从链接下载代码,然后像这样使用 FreeTransform.cs:

    using (System.Drawing.Bitmap sourceImg = new System.Drawing.Bitmap(@"c:\image.jpg")) 
    { 
        YLScsDrawing.Imaging.Filters.FreeTransform filter = new YLScsDrawing.Imaging.Filters.FreeTransform(); 
        filter.Bitmap = sourceImg;
        // assign FourCorners (the four X/Y coords) of the new perspective shape
        filter.FourCorners = new System.Drawing.PointF[] { new System.Drawing.PointF(0, 0), new System.Drawing.PointF(300, 50), new System.Drawing.PointF(300, 411), new System.Drawing.PointF(0, 461)}; 
        filter.IsBilinearInterpolation = true; // optional for higher quality
        using (System.Drawing.Bitmap perspectiveImg = filter.Bitmap) 
        {
            // perspectiveImg contains your completed image. save the image or do whatever.
        } 
    }
    

    仅供参考,我相信 .NET 有 2gb 的对象内存限制,所以如果您处理非常大的图像,您可能会遇到内存错误。

    【讨论】:

      【解决方案2】:

      我认为my question over here 的答案对您的情况也有帮助。

      【讨论】:

      • 类似的东西。但最大的困难是我不能简单地拉伸我转换后的图像。当我增加尺寸时,必须使用更大尺寸的新图像适当平铺并且具有相同的视角。我只是想不出一种方法来实现这一目标。希望这是有道理的。
      • 我不确定我是否理解正确。我认为那里的解决方案可以满足您的需求。您看过第三张示例图片了吗?
      • 这张图片描述了我想要实现的目标:4shared.com/photo/DCp6oFjR/TiledImage.html
      • 这应该也是可能的,通过使用正确的坐标多次复制原始图像 - 在这种情况下,复制目标将不是矩形而是梯形。不过,您需要自己通过摄像机角度计算坐标,这需要一些数学运算,但应该不会太难(如果我估计正确的话)。 --- 图像说“改造后”,来源是什么?应用源图像而不是转换后的图像会更容易吗?
      • 是的,正在研究同样的想法。我正在使用源图像将其平铺多次以生成更大的图像,然后对其应用变换并切出所需区域。但是在某些情况下,图像非常大,以至于当我尝试应用转换时,我得到了我们的内存异常。现在我正在尝试限制生成图像的大小并在最终图像中对剩余部分进行着色。我猜没有其他选择。感谢 mafutrct 的帮助。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2011-02-16
      • 2021-12-21
      相关资源
      最近更新 更多