OpenCV基础篇——图形图像旋转
2014-08-28 20:35
746 查看
以前在做图像处理的时候用到了图像的旋转,opencv自带的flip函数只能180度,因为需要旋转任意角度,顺时针和逆时针的情况,所以去找了些效果比较好的函数来实现。网上有的旋转函数有内存泄露的现象,现在把修改过我用过的无内存泄露的函数分享一下:
一:
二:
三:
四:
cvTranspose( const CvArr* src, CvArr* dst );的使用
五:推荐
一:
void cvRotate(IplImage* src,int angle) { IplImage * dst = 0; dst = cvCloneImage (src); double delte = 1.0; double factor = 1.0; float m[6]; CvMat M = cvMat( 2, 3, CV_32F, m ); int w = src->width; int h = src->height; m[0] = (float)(factor*cos(-angle*2*CV_PI/180.)); m[1] = (float)(factor*sin(-angle*2*CV_PI/180.)); m[2] = w*0.5f; m[3] = -m[1]; m[4] = m[0]; m[5] = h*0.5f; cvZero (dst); cvGetQuadrangleSubPix( src, dst, &M); *src = *dst; }
二:
IplImage* cvRotate2(IplImage* src,IplImage * dst ) { double delte = 1.0; double factor =1.0; float m[6]; int angle =90; int tempLength = (int)sqrt(float(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; IplImage* temp = cvCreateImage(cvSize(src->width,src->height), src->depth, src->nChannels); cvZero(temp); cvCopy(src, temp, NULL); int w = temp->width; int h = temp->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; CvMat M = cvMat(2, 3, CV_32F, m); cvGetQuadrangleSubPix( temp,dst, &M); cvReleaseImage(&temp); return dst; }
三:
IplImage *cvRotate(IplImage *imgSrc) { double degree = 270; // rotate 30 degree double angle = degree * CV_PI / 180.; // angle in radian double a = sin(angle), b = cos(angle); // sine and cosine of angle int w_src = imgSrc->width; int h_src = imgSrc->height; int w_dst = int(h_src * fabs(a) + w_src * fabs(b)); int h_dst = int(w_src * fabs(a) + h_src * fabs(b)); // map matrix for WarpAffine, stored in statck array double map[6]; CvMat map_matrix = cvMat(2, 3, CV_64FC1, map); // Rotation center needed for cv2DRotationMatrix CvPoint2D32f pt = cvPoint2D32f(w_src / 2, h_src / 2); cv2DRotationMatrix(pt, degree, 1.0, &map_matrix); // Adjust rotation center to dst's center, // otherwise you will get only part of the result map[2] += (w_dst - w_src) / 2; map[5] += (h_dst - h_src) / 2; // We need a destination image IplImage *imgDst = cvCreateImage(cvSize(w_dst, h_dst), 8, 3); cvWarpAffine( imgSrc, imgDst, &map_matrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll(0) ); return imgDst; }
四:
cvTranspose( const CvArr* src, CvArr* dst );的使用
五:推荐
void cvRotate(IplImage* img,IplImage *img_rotate,int degree) { //旋转中心为图像中心 CvPoint2D32f center; center.x=float (img->width/2.0+0.5); center.y=float (img->height/2.0+0.5); //计算二维旋转的仿射变换矩阵 float m[6]; CvMat M = cvMat( 2, 3, CV_32F, m ); cv2DRotationMatrix( center, degree,1, &M); //变换图像,并用黑色填充其余值 cvWarpAffine(img,img_rotate, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) ); }
相关文章推荐
- opencv中图像旋转
- opencv提取旋转矩形区域的图像(将旋转矩形区域图像旋转成水平)
- OpenCV中图像旋转(warpAffine)算法的实现过程
- OpenCV文本图像的旋转矫正
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转
- opencv----计算图像旋转参数
- OpenCV中图像旋转(warpAffine)算法的实现过程
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- OpenCv调整图像大小及仿射变换(旋转)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- 在Python下利用OpenCV来旋转图像的教程
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转
- opencv 图像翻转、旋转
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转
- OpenCV截取图像的任意形状区域,规则的图形(圆、椭圆、矩形),不规则鼠标自己选择
- OpenCV图像的旋转
- opencv3_java 在图形图像上画线LinesOnImage Imgproc.line
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 下篇 补充话题
- 利用OpenCV实现旋转文本图像矫正的原理及OpenCV代码
- openCv 图像顺时针、逆时针旋转