通过下面这个函数调用
Rotate90(workImg,270);//顺时针旋转
Rotate90(workImg,90);//逆时针旋转
实现,其实用该函数旋转任意度数对正方形图都ok,只是长方形图旋转后会有拉伸部分,不好掌握新图的长宽。
void Rotate90(IplImage *workImg,int angle){ int opt = 0; // 1: 加缩放 0: 仅旋转 double factor; // 缩放因子 IplImage *pImage; IplImage *pImgRotation = NULL; pImage = workImg; pImgRotation = cvCloneImage(workImg); angle=-angle; // 创建 M 矩阵 float m[6]; // 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 = workImg->height; int h = workImg->width; if (opt) factor = (cos(angle*CV_PI/180.)+1.0)*2; else factor = 1; m[0] = (float)(factor*cos(-angle*CV_PI/180.)); m[1] = (float)(factor*sin(-angle*CV_PI/180.)); m[3] = -m[1]; m[4] = m[0]; // 将旋转中心移至图像中心 m[2] = w*0.5f; m[5] = h*0.5f; //--------------------------------------------------------- // dst(x,y) = A * src(x,y) + b cvZero(pImgRotation); cvGetQuadrangleSubPix(pImage,pImgRotation,&M); //--------------------------------------------------------- cvNamedWindow("Rotation Image"); cvFlip(pImgRotation); cvShowImage("Rotation Image",pImgRotation); cvReleaseImage( &pImgRotation ); cvWaitKey(0); cvDestroyWindow("Rotation Image");}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow