我想使用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);
}
}
原始图片:
我的结果:
如果有人可以指出我做错了什么,我会非常感激! :)
答案 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
论点是什么?