2016-10-07 229 views
1

我目前正致力於在C#中實現EmguCV中的算法,這意味着我不想使用EmguCV附帶的旋轉函數中的構建。如何在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值。

也許有人可以幫助我在這裏。

編輯: 有人提出這個答案在這裏:「How can I get and set pixel values of an EmguCV Mat image?」將是我的問題的答案。但事實並非如此。我知道我可以做Math.Cos和Math.Sin,但我不知道如何在我的矩陣中指定X和Y.我在訪問Matrix中的數據時沒有問題。

+0

的[我怎樣才能獲取和設置EmguCV墊圖像的像素值,可能的複製? ](http://stackoverflow.com/questions/32255440/how-can-i-get-and-set-pixel-values-of-an-emgucv-mat-image) – slawekwin

回答

0

如果你想旋轉的一些點(cx,cy)附加圖像中給出的矩陣點(x,y)

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