2016-10-07 8 views
1

В настоящее время я работаю над внедрением алгоритма в EmguCV в C#, что означает, что я не хочу использовать функцию rotate, которая поставляется с EmguCV.Как реализовать алгоритм rotate в Emgu CV?

Я уже нашел алгоритм, который я хочу реализовать, но я как бы зациклился на том, как его реализовать. Основная проблема заключается в том, что я не знаю, как указать значения X и Y моей матрицы для выполнения запланированных вычислений.

вращения Алгоритм: http://i.stack.imgur.com/hQMxF.jpg

Прямо сейчас мой код выглядит следующим образом:

static void Main(string[] args) { 
     Mat image = CvInvoke.Imread("C:\\Users\\Leon\\Desktop\\a.jpg", LoadImageType.Grayscale); 

     int height = image.Height; 
     int width = image.Width; 

     //Convert to Matrix 
     Matrix<Byte> matrix = new Matrix<Byte>(image.Rows, image.Cols, image.NumberOfChannels); 
     image.CopyTo(matrix); 

     Matrix<Byte> newMatrix = new Matrix<Byte>(image.Rows, image.Cols, image.NumberOfChannels); 
     image.CopyTo(newMatrix); 

     for (int i = 0; i < matrix.Rows-1; i++) 
     { 
      for (int j = 0; j < matrix.Cols-1; j++) 
      { 

      } 
     } 

     CvInvoke.Imshow("abc", matrix); 
     CvInvoke.WaitKey(0); 

    } 

Но, как я уже сказал, я в сомнении о том, как реализовать алгоритм. Мой план состоял в том, чтобы повернуть пиксели в «матрице» и сохранить их в «newMatrix», но я не знаю, как указать значения X и Y моей матрицы.

Возможно, кто-то может помочь мне здесь.

EDIT: Было высказано предположение, что этот ответ здесь: «How can I get and set pixel values of an EmguCV Mat image?» будет ответом на мой вопрос. Но это не так. Я знаю, что могу делать Math.Cos и Math.Sin, но я не знаю, как указать X и Y в моей матрице. У меня нет проблем с доступом к данным в моей матрице.

+0

Возможный дубликат [Как я могу получить и установить значение пикселей в EmguCV Mat изображения? ] (http://stackoverflow.com/questions/32255440/how-can-i-get-and-set-pixel-values-of-an-emgucv-mat-image) – slawekwin

ответ

0

Если вы пытаетесь повернуть точку (x,y) о каком-то моменте (cx,cy) данной матрицы в прилагаемом изображении:

class Program { 
    /** 
    * @param x coordinate of point want to rotate 
    * @param y coordinate of point want to rotate 
    * @param cx x coordinate of point you want to rotate about 
    * @param cy y coordinate of point you want to rotate about 
    * @return the result of rotation {x,y} 
    */ 
    static double[] rotate(double x, double y, double cx, double cy, double angle) { 
    double cos_a = Math.Cos(angle); 
    double sin_a = Math.Sin(angle); 

    // move to origin 
    x -= cx; 
    y -= cy; 

    // rotate and then move back 
    return new double[] { 
     x*cos_a - y*sin_a + cx, 
     x*sin_a + y*cos_a + cy 
    }; 
    } 


    static void Main(string[] args) { 
    double x = 1; 
    double y = 0; 
    double a = Math.PI/2; 

    double[] r = rotate(x, y, 0, 0, a); 
    Console.WriteLine("new x = " + r[0]); 
    Console.WriteLine("new y = " + r[1]); 
    } 
} 
+0

Я попытался скопировать формулу вращения но результат не соответствует действительности. Может, кто-то знает, что случилось? – Leon