EmguCV旋转算法不起作用

时间:2016-10-12 09:59:27

标签: c# algorithm opencv rotation emgucv

我想使用OpenCV / EmguCV旋转图像。我找到了一个我想要实现的旋转算法,但结果并不像我希望的那样。也许有人可以看看。

我的代码:

static void Main(string[] args)
    {
        Mat image = CvInvoke.Imread("C:\\Users\\Leon\\Downloads\\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++)
            {
                newMatrix.Data[i, j] = matrix.Data[(byte)(i * Math.Cos(3) - j * Math.Sin(3)), (byte)(i * Math.Sin(3) + j * Math.Cos(3))];
            }
        }

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

    }
}

原始图片:

Vladimir Putin

我的结果:

incorrectly rotated

如果有人可以指出我做错了什么,我会非常感激! :)

1 个答案:

答案 0 :(得分:1)

方形长度为256的图案表示存在一些坐标溢出。

在这里查看转换为字节:

('brand', 'author', 'company')

似乎你需要将浮点值舍入为int,然后检查 - 对于x和y,它是否位于范围www.site.com/{brand_type}/{brand_slug}public class MyContext : DbContext { public DbSet<Contact> Contacts { get; set; } public DbSet<Contact_phone> Contact_phones{ get; set; } }

可能的伪代码:

 matrix.Data[(byte)(i * Math.Cos(3) - j * Math.Sin(3)), (byte)(i * Math.Sin(3) + j * Math.Cos(3))];

除了问题:Sin和Cos的0..width-1论点是什么?