图像旋转公式及opencv中cvgetquadranglesubpix 的用法

上传人:wt****50 文档编号:39592156 上传时间:2018-05-17 格式:DOC 页数:5 大小:27KB
返回 下载 相关 举报
图像旋转公式及opencv中cvgetquadranglesubpix 的用法_第1页
第1页 / 共5页
图像旋转公式及opencv中cvgetquadranglesubpix 的用法_第2页
第2页 / 共5页
图像旋转公式及opencv中cvgetquadranglesubpix 的用法_第3页
第3页 / 共5页
图像旋转公式及opencv中cvgetquadranglesubpix 的用法_第4页
第4页 / 共5页
图像旋转公式及opencv中cvgetquadranglesubpix 的用法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《图像旋转公式及opencv中cvgetquadranglesubpix 的用法》由会员分享,可在线阅读,更多相关《图像旋转公式及opencv中cvgetquadranglesubpix 的用法(5页珍藏版)》请在金锄头文库上搜索。

1、 图像任意角度的旋转公式 图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,通常是指绕图像的中心以逆时针方向旋转。 首先根据旋转的角度、图象对角线的长度计算旋转后的图像的最大宽度、高度,根据旋转后图象最大的宽度、高度生成新的缓冲区,假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x, y)绕其中心(xcenter, ycenter)逆时针旋转 angle 角度后,新的坐标位置(x1, y1)的计算公式为: xcenter = (width+1)/2+left; ycenter = (height+1)/2+top; x1 =

2、(x-xcenter) cos- (y - ycenter) sin+xcenter; y1 = (x-xcenter) sin+ (y- ycenter) cos+ ycenter; 与图像的镜像变换相类似,把原图中的象素值读入新缓冲区的(x1,y1)点处。注意在新缓冲区中与原图没有对应的象素点的值用白色代替。 GetQuadrangleSubPix提取象素四边形,使用子象素精度 void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );src 输入图像. dst 提取的四边形. m

3、ap_matrix 3 2 变换矩阵 A|b (见讨论). 函数 cvGetQuadrangleSubPix 以子象素精度从图像 src 中提取四边形,使用子象素精度,并且将结果存储于 dst ,计算公式是: dst(x + width(dst) / 2,y + height(dst) / 2) = src(A11x + A12y + b1,A21x + A22y + b2) 其中 A 和 b 均来自映射矩阵(译者注:A, b 为几何形变参数) ,映射矩阵为: 其中在非整数坐标 的象素点值通过双线性变换得到。当函数需要图像边界外的像素点时,使用重复边界模式(replication border

4、 mode)恢复出所需的值。多通道图像的每一个通道都单独计算。 例子:使用 cvGetQuadrangleSubPix 进行图像旋转 #include “cv.h“#include “highgui.h“#include “math.h“#includeint main( int argc, char* argv )IplImage* src;/* the first command line parameter must be image file name */if( (src = cvLoadImage(“.1q.png“, -1)printf(“sdfs“);IplImage* dst

5、 = cvCloneImage( src );int delta = 1;int angle = 0;int opt = 0; / 1: 旋转加缩放/ 0: 仅仅旋转double factor;cvNamedWindow( “src“, 1 );cvShowImage( “src“, src );for(;)float m6;/ Matrix m looks like:/ m0 m1 m2 = A11 A12 b1 / m3 m4 m5 A21 A22 b2 / CvMat M = cvMat( 2, 3, CV_32F, m );int w = src-width;int h = src-h

6、eight;if(opt) / 旋转加缩放factor = (cos(angle*CV_PI/180.) + 1.05)*2;else / 仅仅旋转factor = 1;m0 = (float)(factor*cos(-angle*2*CV_PI/180.);m1 = (float)(factor*sin(-angle*2*CV_PI/180.);m3 = -m1;m4 = m0;/ 将旋转中心移至图像中间m2 = w*0.5f; m5 = h*0.5f; / dst(x,y) = A * src(x,y) + bcvGetQuadrangleSubPix( src, dst, cvNamedWindow( “dst“, 1 );cvShowImage( “dst“, dst );if( cvWaitKey(85) = 27 )break;angle =(int) (angle /*+ delta*/) % 360; / for-loopreturn 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号