OpenCV图像旋转Rotate的详细介绍

目录
  • 功能函数
  • getRotationMatrix2D函数原型
  • getRotationMatrix2D参数说明
  • warpAffine函数原型
  • warpAffine参数说明
  • C++测试代码
  • 测试效果

功能函数

// 图像旋转
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

不难看出,旋转后原图的尺寸已经无法满足图像要求了,此时可以缩小比例,也可以扩展整图尺寸使其完全覆盖。

到此这篇关于OpenCV图像旋转Rotate的文章就介绍到这了,更多相关OpenCV图像旋转内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

(0)

相关推荐

  • 使用c++实现OpenCV绘制图形旋转矩形

    目录 功能函数 // 绘制旋转矩形 void DrawRotatedRect(cv::Mat mask,const cv::RotatedRect &rotatedrect,const cv::Scalar &color,int thickness, int lineType) { // 提取旋转矩形的四个角点 cv::Point2f ps[4]; rotatedrect.points(ps); // 构建轮廓线 std::vector<std::vector<cv::Poin

  • OpenCV和C++实现图像的翻转(镜像)、平移、旋转、仿射与透视变换

    目录 一.翻转(镜像) 二.仿射扭曲 获取变换矩阵 仿射扭曲函数 warpAffine 旋转 平移 三.仿射变换 四.透视变换 综合示例 总结 官网教程 一.翻转(镜像) 头文件 quick_opencv.h:声明类与公共函数 #pragma once #include <opencv2\opencv.hpp> using namespace cv; class QuickDemo { public: ... void flip_Demo(Mat& image); void rotat

  • 超详细注释之OpenCV旋转图像任意角度

    上一篇博客介绍了 如何使用Python,OpenCV上下左右(或任意组合)平移图像.这篇博客将介绍如何使用OpenCV旋转图像任意角度.并演示如何使用imutils库中的两个函数imutils.rotate和imutils.rotate_bound不丢失细节的旋转图像. 使用OpenCV应用图像旋转时,有3种方法实现: cv2.getRotationMatrix2D 和 cv2.warpAffine: imutils.rotate 同方法1(可能局部丢失): imutils.rotate_bou

  • opencv图片的任意角度旋转实现示例

    目录 一 旋转角度坐标的计算 二 旋转任意角度的步骤 三 实现 一 旋转角度坐标的计算 1.如果O点为圆心,则点P绕点O旋转redian弧度之后,点P的坐标变换为点Q的计算公式为: Q.x=P.x*cos(redian)-P.y*sin(redian) Q.y=P.x*sin(redian)+P.y*cos(redian) redian表示的为弧度 弧度与角度的变换公式为: redian=pi*180/angle 2. 如果O点不是圆心,则点P绕点O旋转redian弧度之后,点P的坐标变换为Q的

  • OpenCV图像旋转Rotate的详细介绍

    目录 功能函数 getRotationMatrix2D函数原型 getRotationMatrix2D参数说明 warpAffine函数原型 warpAffine参数说明 C++测试代码 测试效果 功能函数 // 图像旋转 void Rotate(const cv::Mat &srcImage, cv::Mat &dstImage, double angle, cv::Point2f center, double scale) { cv::Mat M = cv::getRotationMa

  • OpenCV 图像旋转、平移、缩放操作代码

    目录 1 缩放图片 2 翻转图片 2.1 垂直翻转 2.2 水平翻转 2.3 水平垂直翻转 3 平移图片 本文是 OpenCV图像视觉入门之路的第7篇文章,本文详细的进行了图像的缩放 cv2.resize().旋转 cv2.flip().平移 cv2.warpAffine()等操作. 1 缩放图片 缩放就是调整图片的大小,使用cv2.resize()函数实现缩放,可以按照比例缩放,也可以按照指定的大小缩放:也可以指定缩放方法为线性插值INTER_LINEAR. 放过程中有五种插值方式: cv2.

  • python中的opencv 图像梯度

    目录 图像梯度 Sobel理论基础 计算水平方向偏导数的近似值 计算垂直方向偏导数的近似值 Sobel算子及函数使用 方向 计算x方向和y方向的边缘叠加 Scharr算子及函数使用 Sobel算子和Scharr算子的比较 Laplacian算子及函数使用 算子总结 图像梯度 图像梯度计算的是图像变化的速度.对于图像的边缘部分,其灰度值变化较大,梯度值也较大:相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小.图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的

  • python OpenCV图像金字塔

    目录 1.图像金字塔理论基础 2.向下取样函数及使用 3.向上取样函数及使用 4.采样可逆性研究 5.拉普拉斯金字塔 6.图像轮廓介绍 轮廓近似 1.图像金字塔理论基础 图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合.其通过梯次向下采样获得,直到达到某个终止条件才停止采样.我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低.那我们为什么要做图像金字塔呢?这

  • C#使用opencv截取旋转矩形区域图像的实现示例

    前言:最近在工程中需要用到截取RotatedRect中的图形,保存为Mat做后续处理.发现opencv文档中没有这个api,最开始想到的方案是将整张图片进行相应的旋转,然后再从中截取正矩形,但是我们要获取的是部分区域,将整张图片进行旋转会造成很多的资源浪费.所以需要自行实现一个旋转矩形的方案. 实现方法 原理是利用向量空间变换,如图 通过 Point2f[] points=rotatedRect.Points(); 可获取RotatedRect四个端点的坐标.先选定一个点为输出Mat左上端点,这

  • Jetpack Compose Canvas绘制超详细介绍

    目录 1. Canvas 2. 绘制方法 1. drawLine 2. drawRect 3. drawRoundRect 4. drawImage 5. drawCircle 6. drawArc 7. drawPath 8. drawPoints 3. DrawScope拓展方法 1. inset 2. translate 3. rotate与rotateRad 4. scale 5. clipRect 6. drawIntoCanvas 7. withTransform 4.参考 1. C

  • Python OpenCV 图像平移的实现示例

    每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合自己理解的部分. 再将其拼凑成一个小的系统,争取对该内容有初步理解. 今天这 1 个小时,核心要学习的是图像的平移,在电脑上随便打开一张图片,实现移动都非常简单,但是在代码中,出现了一些新的概念. 检索 OpenCV 图像平移相关资料时,碰到的第一个新概念是就是 仿射变换. 每次看到这样子的数学名字,必然心中一凉,做为一个数学小白,又要瑟瑟发抖了. 百度一下,看看百科中是如何介绍的. 看过上图中的一些相关简介之后,对于这个概念也并没有太深刻

  • C++ opencv将图片动漫化介绍

    目录 边缘检测 贴边缘图到原图 双边滤波 HSI空间修改饱和度 后续: 总结 最近对图像处理十分感兴趣,也学着用opencv 实现各种简单的图像处理,因此,有了下面的实验,就是将照片处理成漫画的风格. 对照片进行动漫话一般需要四个步骤1.边缘检测2.将边缘检测得到的边缘 以黑色的形式贴在原来的画上.3.对贴了边缘的图进行双边滤波,双边滤波可以较好的滤波的同时保留边缘.4.修改图像的颜色的饱和度,本文采用的是将RGB转化为HSI空间,然后调整S分量. 边缘检测 对于边缘检测,本文采用的是canny

  • jQuery Deferred和Promise创建响应式应用程序详细介绍

    这篇文章,我们一起探索一下 JavaScript 中的 Deferred 和 Promise 的概念,它们是 JavaScript 工具包(如Dojo和MochiKit)中非常重要的一个功能,最近也首次亮相于 流行的 JavaScript 库 jQuery(已经是1.5版本的事情了). Deferred 提供了一个抽象的非阻塞的解决方案(如 Ajax 请求的响应),它创建一个 "promise" 对象,其目的是在未来某个时间点返回一个响应.如果您之前没有接触过 "promis

  • Android中imageview.ScaleType使用方法详细介绍

    Android中imageview.ScaleType使用方法详细介绍 ScaleType属性用以表示显示图片的方式,共有8种取值: ScaleType.CENTER:图片大小为原始大小,如果图片大小大于ImageView控件,则截取图片中间部分,若小于,则直接将图片居中显示. ScaleType.CENTER_CROP:将图片等比例缩放,让图像的短边与ImageView的边长度相同,即不能留有空白,缩放后截取中间部分进行显示. ScaleType.CENTER_INSIDE:将图片大小大于Im

随机推荐