我最近在图像处理上写了一个函数,目的是使一个矩形图像变成平行四边形图像,效果是出来了,可是处理的数度较慢不是很理想,经过调试发现主要是一下两条关于浮点型运算的语句造成的,请大家帮我优化一下,提高程序的运行速度:
int DestX = (int)(i%Width*cosine);
int DestY =(int)((i/Width + 1) - i%Width*sine);
其中Width是整型数据,cosine和sine是通过三角函数Cos和Sin运算得到的浮点数据
int DestX = (int)(i%Width*cosine);
int DestY =(int)((i/Width + 1) - i%Width*sine);
其中Width是整型数据,cosine和sine是通过三角函数Cos和Sin运算得到的浮点数据
解决方案 »
- IWebBrowser2显示的网页出现双滚动条
- 專案是dll,可需連exe檔才能使用,該怎麼測試?
- 为什么VS2010中用MFC搭建的界面,界面风格有时候会改变?
- 标签式对话框无法访问试图父窗口?
- 谁知道LabWindows/CVI的资料哪里下载呀??
- 如何作出飘雪的效果
- 现在除了利用TELNET协议外,还能利用其它执行远程Unix服务器上的shell程序吗?
- ++关于ACCESS数据库的问题!++
- 关于jmail编写邮件程序的一个问题,请高手指教!(100分相送)
- 大家来说说<iostream.h>和<iostream>
- 一个再简单不过的D3D9的小程序,为什么我的 MESH 变形了呢???
- 取页面元素的坐标问题
float b = 3.21;float c = a * b;这是一个浮点运算,改成整形如下int a = 102;
int b = 321;
int c = a * b;上面这种做法,有效数字得到保证, 在整整需要浮点的地方, floag fc = c / 10000.0;
iq库的基本原理就是用DWORD的定点来做浮点运算,参见http://focus.ti.com/docs/toolsw/folders/print/sprc087.html(英文)
楼主到这里去看看:http://media.cs.tsinghua.edu.cn/~ahz/digitalimageprocess/chapter06/chapt06_ahz.htm
我想楼主应该是用的文章里面的 仿射变换(affine transformation)的公式吧。
你再往下看一下 3.2 透视变换(Perspective Transformation)
下面的公式应该没有用到三角函数的。 而防射变化可以看成是透视变换的特例。 所以我推荐楼主使用透视变化的公式去解决你的问题。
上面的第二个图就是我在OpenCV下使用透视变换得到的第一个图变成平行四边形的效果。
使用的主要函数是:
cvGetPerspectiveTransform(srcpoints,dstpoints,&mat ); //取得透视变换矩阵
cvWarpPerspective(src,dst,&mat,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0)); //进行透视变换
这说明透视变化也可以把矩形编程平行四边形,而且速度上应该很快。不是让楼主去用OpenCV 实现 而是想让楼主去解那个公式 来实现达到你提高运算速度的目的。
以上所说,仅作参考。