图像旋转

绕原点旋转
newx=x*cosa-y*sina
newy=x*sina+y*cosa
绕某一定点A(x0,y0)旋转
1.平移变换,将坐标原点移动到A点
newx=x-x0
newy=y-y0
2.旋转
newx=newx*cosa-newy*sina
newy=newx*sina+newx*cosa
3.平移变换,将坐标原点变回原来的O(0,0)点
newx=newx+x0
newy=newy+y0

PS:
在C#中,Math.Cos,Math.Sin等操作采用的angle度量为弧度!

在Emgu中,Rotation采用的angle度量为角度!

code:

 private Point translation(Point pt,Point pteye,double angle)
        {
            //pt:原始坐标 pteye:参考点原始坐标 
            Point newpt = new Point();          
            pt.X -= pteye.X;
            pt.Y -= pteye.Y;
            newpt.X = Convert.ToInt16(pt.X * Math.Cos(angle) - pt.Y * Math.Sin(angle)+pteye.X);
            newpt.Y = Convert.ToInt16(pt.X * Math.Sin(angle) + pt.Y * Math.Cos(angle) + pteye.Y);    
            return newpt;
        }

result:

以左眼中心为旋转中心,旋转后左眼中心坐标不变,其余标记点均有变换

图像旋转_第1张图片

对所有点进行坐标变换后


你可能感兴趣的:(图像旋转)