OpenCV图像旋转Rotate的详细介绍
作者:翟天保Steven 发布时间:2023-07-01 08:22:27
标签:OpenCV,旋转,Rotate
功能函数
// 图像旋转
void Rotate(const cv::Mat &srcImage, cv::Mat &dstImage, double angle, cv::Point2f center, double scale)
{
cv::Mat M = cv::getRotationMatrix2D(center, angle, scale);//计算旋转的仿射变换矩阵
cv::warpAffine(srcImage, dstImage, M, cv::Size(srcImage.cols, srcImage.rows));//仿射变换
}
getRotationMatrix2D函数原型
getRotationMatrix2D用来获得旋转的仿射变换矩阵。
Mat getRotationMatrix2D(Point2f center, double angle, double scale);
getRotationMatrix2D参数说明
Point2f类型的center,旋转中心。
double类型的angle,逆时针旋转的角度。
double类型的scale,图像旋转后的尺寸比例。
warpAffine函数原型
warpAffine用来仿射变换。
void warpAffine( InputArray src, OutputArray dst,
InputArray M, Size dsize,
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar());
warpAffine参数说明
InputArray类型的src,输入图像。
OutputArray类型的dst,输出图像。
InputArray类型的M,仿射变换矩阵。
Size类型的dsize,输出图像的大小。
int类型的flags,插值方法。
int类型的borderMode,边界填充方法。
const Scalar&类型的borderValue,边界填充数值。
C++测试代码
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
// 图像旋转
void Rotate(const cv::Mat &srcImage, cv::Mat &dstImage, double angle, cv::Point2f center, double scale)
{
cv::Mat M = cv::getRotationMatrix2D(center, angle, scale);//计算旋转的仿射变换矩阵
cv::warpAffine(srcImage, dstImage, M, cv::Size(srcImage.cols, srcImage.rows));//仿射变换
}
int main()
{
// 载入图像
cv::Mat src = imread("0.jpg");
cv::Mat dst;
// 定义参数
int row = src.rows;
int col = src.cols;
double angle = 30;
cv::Point2f center(col / 2, row / 2);
double scale = 0.5;
// 图像旋转
Rotate(src, dst, angle, center, scale);
// 显示图像
imshow("src", src);
imshow("result", dst);
waitKey(0);
system("pause");
return 0;
}
测试效果
图原图
图2 旋转30°
图3原图大小旋转45
不难看出,旋转后原图的尺寸已经无法满足图像要求了,此时可以缩小比例,也可以扩展整图尺寸使其完全覆盖。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
来源:https://blog.csdn.net/zhaitianbao/article/details/124516085


猜你喜欢
- 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下。今天使用Java代码实现文件的上传和下
- 工具准备jdk, maven, tomcat9, vscode;上述软件的安装配置在百度就能找到很多教程, 所以此处不详述.(jdk使用1.
- 一、安装及配置Genymotion(1)由于Eclipse中自带的SDK模拟器,启动之慢,不说了 现在给大家介绍一种比较快的模拟器Genym
- * 惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧,先把工作完成了,再看也来得及,是吧!在项目中这种添加图片上传的效
- 1、前言 最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例;也经过自己的一番查询和调试,浪
- 一、项目搭建1、可以在新建项目的使用Spring MVC框架。或者创建一个简单的项目之后再用Add Framework Support来添加
- 本文为大家分享了Toast类避免显示时间叠加的方法,供大家参考,具体内容如下import android.app.Activity;impo
- SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchvi
- 本文实例讲述了Java Web实现添加定时任务的方法。分享给大家供大家参考,具体如下:定时任务时间控制类/** * 定时任务时间控制 * *
- 本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:package com.soufun.co
- 1.为什么要 token自动续期token中一般会包含用户的基本信息,为了保证token的安全性,一般会将token的过期时间设置的比较短,
- 概述线程池的好处和使用本篇文章就不赘叙了,不了解的可以参考下面两篇文章:一文全貌了解线程池的正确使用姿势学习线程池原理从手写一个线程池开始那
- java.lang.NoClassDefFoundError错误解决办法前言在日常Java开发中,我们经常碰到java.lang.NoCla
- 本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Coll
- Java中字符串中子串的查找共有四种方法,如下:1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串
- 1、背景本系统调用外围系统接口(http+json),但是发现有时外围系统服务不太稳定,有时候会出现返回一串xml或者gateway bad
- 本文测试使用的springcloud版本为:Dalston.SR1很多朋友只知道springcloudconfig可以刷新远程git的配置到
- 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能;介绍了TCP报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面
- 结构图: 抽象对象: abstract class Component  
- 本文实例讲述了Android使用selector修改TextView中字体颜色和背景色的方法。分享给大家供大家参考,具体如下:android