图像旋转代码
来源:互联网 发布:软件项目阶段性总结 编辑:程序博客网 时间:2024/06/06 18:14
- void ImgRotate(cv::Mat imgIn, float theta, cv::Mat& imgOut)
- {
- int oldWidth = imgIn.cols;
- int oldHeight = imgIn.rows;
- // 源图四个角的坐标(以图像中心为坐标系原点)
- float fSrcX1,fSrcY1,fSrcX2,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4;
- fSrcX1 = (float) (- (oldWidth - 1) / 2);
- fSrcY1 = (float) ( (oldHeight - 1) / 2);
- fSrcX2 = (float) ( (oldWidth - 1) / 2);
- fSrcY2 = (float) ( (oldHeight - 1) / 2);
- fSrcX3 = (float) (- (oldWidth - 1) / 2);
- fSrcY3 = (float) (- (oldHeight - 1) / 2);
- fSrcX4 = (float) ( (oldWidth - 1) / 2);
- fSrcY4 = (float) (- (oldHeight - 1) / 2);
- // 旋转后四个角的坐标(以图像中心为坐标系原点)
- float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4;
- fDstX1 = cos(theta) * fSrcX1 + sin(theta) * fSrcY1;
- fDstY1 = -sin(theta) * fSrcX1 + cos(theta) * fSrcY1;
- fDstX2 = cos(theta) * fSrcX2 + sin(theta) * fSrcY2;
- fDstY2 = -sin(theta) * fSrcX2 + cos(theta) * fSrcY2;
- fDstX3 = cos(theta) * fSrcX3 + sin(theta) * fSrcY3;
- fDstY3 = -sin(theta) * fSrcX3 + cos(theta) * fSrcY3;
- fDstX4 = cos(theta) * fSrcX4 + sin(theta) * fSrcY4;
- fDstY4 = -sin(theta) * fSrcX4 + cos(theta) * fSrcY4;
- int newWidth = ( max( fabs(fDstX4 - fDstX1), fabs(fDstX3 - fDstX2) ) + 0.5);
- int newHeight = ( max( fabs(fDstY4 - fDstY1), fabs(fDstY3 - fDstY2) ) + 0.5);
- imgOut.create(newHeight, newWidth, imgIn.type());
- float dx = -0.5*newWidth*cos(theta) - 0.5*newHeight*sin(theta) + 0.5*oldWidth;
- float dy = 0.5*newWidth*sin(theta) - 0.5*newHeight*cos(theta) + 0.5*oldHeight;
- int x,y;
- for (int i=0; i<newHeight; i++)
- {
- for (int j=0; j<newWidth; j++)
- {
- x = float(j)*cos(theta) + float(i)*sin(theta) + dx;
- y = float(-j)*sin(theta) + float(i)*cos(theta) + dy;
- if ((x<0) || (x>=oldWidth) || (y<0) || (y>=oldHeight))
- {
- if (imgIn.channels() == 3)
- {
- imgOut.at<cv::Vec3b>(i,j) = cv::Vec3b(0,0,0);
- }
- else if (imgIn.channels() == 1)
- {
- imgOut.at<uchar>(i,j) = 0;
- }
- }
- else
- {
- if (imgIn.channels() == 3)
- {
- imgOut.at<cv::Vec3b>(i,j) = imgIn.at<cv::Vec3b>(y,x);
- }
- else if (imgIn.channels() == 1)
- {
- imgOut.at<uchar>(i,j) = imgIn.at<uchar>(y,x);
- }
- }
- }
- }
- }
0 0
- 图像旋转代码
- python图像旋转代码
- 图像旋转和缩放的代码编写
- rotate an image 图像旋转代码
- 图像旋转以及C代码实现
- OpenCV:OpenCV图像旋转的代码
- 图像旋转以及C代码实现
- 旋转图像代码更新(减小了旋转失真)
- 最近邻图像旋转代码 灰度图像 c++实现
- 最近邻方法进行图像旋转 c++代码 旋转后图像内容无损失
- 图像旋转
- 旋转图像
- 图像旋转
- 图像旋转
- 图像旋转
- 图像旋转
- 图像旋转
- 旋转图像
- JS找出数组 arr 中重复出现过的元素
- CentOS下创建应用程序的快捷方式
- 排序算法--插入排序(直接插入排序)
- 在线选题系统完善篇(PHP)
- NYoj 4 ASCII码排序
- 图像旋转代码
- dojo中的AMD模式开发案例
- HTML的基本结构语法 表格, 框架, 表单
- Codeforces 3D Least Cost Bracket Sequence
- 关于添加WINDOWS静态路由的方法
- 2017携程java后台开发工程师暑期实习生招聘面试经验分享
- Discuz!论坛教程之手机触屏版上传图片质量加强
- HEX
- 为什么CENTOS 7.0开始选择XFS作为默认的文件系统?XFS相比ext有什么优点?