Трансформация перспективного изображения с использованием тайлинга - PullRequest
3 голосов
/ 20 апреля 2011

В поисках хорошей библиотеки обработки изображений, которую можно использовать для нового приложения, которое я планирую создать.Я буду использовать C # .NET (VS 2008)

Моему приложению необходимо выполнить следующие действия:

  1. Загрузить изображение при запуске и отобразить его в графическом окне
  2. После этого я должен иметь возможность выбрать четыре точки (TopLeft, TopRight, BottomLeft, BottomRight) в любом месте графического блока.
  3. Затем мне нужно преобразовать исходное изображение в правильную перспективу, используя 4 источника и назначенияточки.

Не только, мне нужно, чтобы конечное изображение было определенного размера.Я хочу, чтобы приложение могло использовать ту же перспективу и возвращать изображение указанного прямоугольного размера (а не размер 4 точки), который я указываю.Я надеюсь, вы понимаете, о чем я.Исходное изображение должно быть мозаичным и преобразованным для получения выходных данных, которые полностью соответствуют указанной области.

Я пробовал некоторые библиотеки, такие как Aforge.NET, ImageMagick, EMGU и т. Д. Некоторые работают медленно.Некоторые могут производить только перспективное изображение небольшого размера.Некоторые дают ошибки памяти.Не могу найти правильное решение.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Я предполагаю, что ответ на мой вопрос здесь может помочь и в вашем случае.

1 голос
/ 12 января 2012

Возможно, вы захотите взглянуть на это, так как это может решить часть вашей проблемы или направить вас в правильном направлении: 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 имеет ограничение на объем памяти объекта в 2 ГБ, поэтому если вы работаете с действительно большими изображениямиВы можете столкнуться с ошибкой памяти.

...