博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV实现图像的旋转
阅读量:7229 次
发布时间:2019-06-29

本文共 1846 字,大约阅读时间需要 6 分钟。

hot3.png

#include "cv.h"#include "highgui.h"#include "math.h"// clockwise 为true则顺时针旋转,否则为逆时针旋转IplImage* rotateImage(IplImage* src, int angle, bool clockwise){ 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;}int main(int argc, char **argv){ IplImage *src = 0; IplImage *dst = 0; // 旋转角度 int angle = 90; src = cvLoadImage("Images\\cones\\imL.png",CV_LOAD_IMAGE_COLOR); cvNamedWindow("src"); cvShowImage("src", src); cvWaitKey(0); dst = rotateImage(src, angle, false); cvNamedWindow("dst"); cvShowImage("dst", dst); cvWaitKey(0); cvSaveImage("dst.jpg",dst); cvReleaseImage(&src); cvReleaseImage(&dst); cvDestroyAllWindows(); return 0;}

转载于:https://my.oschina.net/u/1426828/blog/655482

你可能感兴趣的文章
如何培养良好的编程风格
查看>>
Netty Channel源码分析
查看>>
基于 HTML5 WebGL 的 3D 机房
查看>>
Java编程——数据库两大神器:索引和锁
查看>>
springMvc学习笔记(2)
查看>>
吐槽Javascript系列二:数组中的splice和slice方法
查看>>
什么是Javascript函数节流?
查看>>
MQ框架的比较
查看>>
oschina
查看>>
Octave 入门
查看>>
深度学习入门:10门免费线上课程推荐
查看>>
React组件设计模式(一)
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
express + mock 让前后台并行开发
查看>>
30天自制操作系统-2
查看>>
小程序开发之路(一)
查看>>
Odoo domain写法及运用
查看>>
JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
查看>>
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>
面试题:给你个id,去拿到name,多叉树遍历
查看>>