19,469
社区成员
发帖
与我相关
我的任务
分享
Mat rotateImage(const Mat& source, double angle)
{
Point2f src_center(source.cols/2.0F, source.rows/2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
Mat dst;
warpAffine(source, dst, rot_mat, source.size());
return dst;
}
//图像旋转,angle是角度
IplImage* FitRotate (IplImage* Img_old, double angle)
{
IplImage* Img_tmp = NULL;
double anglerad = (CV_PI* (angle/180)) ;
int newheight =int (fabs(( sin(anglerad)*Img_old->width )) + fabs(( cos(anglerad)*Img_old->height )) );
int newwidth =int (fabs(( sin(anglerad)*Img_old->height)) + fabs(( cos(anglerad)*Img_old->width)) );
Img_tmp = cvCreateImage(cvSize(newwidth,newheight), IPL_DEPTH_8U, 3);
cvFillImage(Img_tmp,0);//目的图像 使用扩展的大小
IplImage* dst = cvCloneImage( Img_old );//目的图像 与原图像等大
float m[6];
CvMat M = cvMat( 2, 3, CV_32F, m );
int w = Img_old->width;
int h = Img_old->height;
m[0] = (float)(cos(angle*CV_PI/180.));
m[1] = (float)(sin(angle*CV_PI/180.));
m[2] = w*0.5f;
m[3] = -m[1];
m[4] = m[0];
m[5] = h*0.5f;
cvGetQuadrangleSubPix( Img_old, dst, &M);
cvGetQuadrangleSubPix( Img_old, Img_tmp, &M);
return Img_tmp;
}