旋转图片,及带剪切的旋转

来源:互联网 发布:孕囊大小三个数据分析 编辑:程序博客网 时间:2024/04/29 13:45
//旋转 剪切原图IplImage* rotateImageCut(IplImage* Img_old,int angle){      IplImage* Img_tmp =cvCloneImage( Img_old);             float m[6];                  CvMat M = cvMat( 2, 3, CV_32F, m );      CvPoint2D32f center;      center.x=float (Img_old->width/2.0+0.5);      center.y=float (Img_old->height/2.0+0.5);         cv2DRotationMatrix( center, angle,1, &M);        cvWarpAffine(Img_old,Img_tmp, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) ); return Img_tmp;}//旋转 原图不变  clockwise 为true则顺时针旋转,否则为逆时针旋转  IplImage* rotateImage(IplImage* src, int angle, bool clockwise=false)  {      angle = abs(angle) % 180;      if (angle > 90)      {          angle = 90 - (angle % 90);      }      IplImage* dst = NULL;      int width =          (double)(src->height * sin(angle * CV_PI / 180.0)) +          (double)(src->width * cos(angle * CV_PI / 180.0 )) + 1;      int height =          (double)(src->height * cos(angle * CV_PI / 180.0)) +          (double)(src->width * sin(angle * CV_PI / 180.0 )) + 1;      int tempLength = sqrt((double)src->width * src->width + src->height * src->height) + 10;      int tempX = (tempLength + 1) / 2 - src->width / 2;      int tempY = (tempLength + 1) / 2 - src->height / 2;      int flag = -1;        dst = cvCreateImage(cvSize(width, height), src->depth, src->nChannels);      cvZero(dst);      IplImage* temp = cvCreateImage(cvSize(tempLength, tempLength), src->depth, src->nChannels);      cvZero(temp);        cvSetImageROI(temp, cvRect(tempX, tempY, src->width, src->height));      cvCopy(src, temp, NULL);      cvResetImageROI(temp);        if (clockwise)          flag = 1;        float m[6];      int w = temp->width;      int h = temp->height;      m[0] = (float) cos(flag * angle * CV_PI / 180.);      m[1] = (float) sin(flag * angle * CV_PI / 180.);      m[3] = -m[1];      m[4] = m[0];      // 将旋转中心移至图像中间      m[2] = w * 0.5f;      m[5] = h * 0.5f;      //      CvMat M = cvMat(2, 3, CV_32F, m);      cvGetQuadrangleSubPix(temp, dst, &M);      cvReleaseImage(&temp);      return dst;  }  

0 0
原创粉丝点击