4168|0

190

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

图像的旋转实验DSP6000 [复制链接]

数学表达式原理:

下面我们来推导一下旋转运算的变换公式。如下图所示,点(x0,y0)经过旋转θ度后
坐标变成(x1,y1)。其数学表达式为:
X0=x1cos(θ)+y1sin(θ)+ccos(θ)-dsin(θ)+a ;
Y0=-xsin(θ)+y1cos(θ)+csin(θ)-dcos(θ)+ b

算法的C语言代码:

/*图像旋转参数*/
Float fAngle=3.1415927/3; //旋转的角度
*画矩形边框函数*/
Void drawRectangle();
*计算图像旋转参数*/
Void computeParameter();
/*进行图像旋转处理*/
void rotate()
{
         int i,j,intInc;
         int intCapYInc;
         int intCapX,intCapY;

         /*进行图像旋转,重新赋值*/
         //方框内奇数行
         for(i=intALines;i          {
             for(j=intAPixels;j              {
            intInc = i*2;   

            intCapX    = (int)(j*cosAngle + intInc*sinAngle + f1 + 0.5);
            intCapYInc = (int)(intInc*cosAngle - j*sinAngle + f1 + 0.5);           

            if((intCapYInc%2)==0)
            {
                     intCapY = intCapYInc/2;
            }
            else
            {
                     intCapY = (intCapYInc-1)/2+numLines/2;
            }

            //判断是否在原图范围内
            if((intCapX>=0) && (intCapX=0) && (intCapY             {
                                //传送亮度信号
                                *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX);                                                                          
                 }
            else
            {
                      *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;
            }

                   }        
         }

         //方框内偶数行
         for(i=numLines/2+intALines;i          {
             for(j=intAPixels;j              {                 
            intInc = (i-numLines/2)*2 + 1;

            intCapX    = (int)(j*cosAngle + intInc*sinAngle + f1 + 0.5);
            intCapYInc = (int)(intInc*cosAngle - j*sinAngle + f1 + 0.5);           

            if((intCapYInc%2)==0)
            {
                     intCapY = intCapYInc/2;
            }
            else
            {
                     intCapY = (intCapYInc-1)/2+numLines/2;
            }            

            //判断是否在原图范围内
            if((intCapX>=0) && (intCapX=0) && (intCapY             {
                                //传送亮度信号
                                *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX);                                                                          
                 }
            else
            {
                      *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;
            }

                   }        
         }        
}
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表