IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV进阶--图像变换(二) -> 正文阅读

[人工智能]OpenCV进阶--图像变换(二)

继上文:

三、图像翻转变换

?

? ? ? ? 在OpenCV中提供了flip()函数用于图像的翻转,该函数的原型如下:

void cv::filp(InputArray src,
              OutputArray dst,
              int flipCode
              )

src:输入图像。

dst:输出图像,与src具有相同的大小,数据类型及通道数。

filpCode:翻转方式标志。数值大于0表示绕y轴进行翻转;数值等于0,表示绕x轴进行翻转;数值小于0,表示绕两个轴翻转。

? ? ? ? 这个函数很简单,没有什么需要讲的,就不放代码实例了。

四、图像仿射变换

? ? ? ? 在OpenCV中是没有图像旋转的函数的,所以我们通过图像仿射变换来实现图像的旋转。我们首先需要确定旋转角度和旋转中心,之后确定旋转矩阵,最终通过仿射变换实现图像的旋转。在OpenCV4中提供了getRotationMatrix2D()函数用于计算旋转矩阵,提供了warpAffine()函数用于实现图像的仿射变换。

如果不了解仿射的可以看下面的内容:

??????http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html

getRotationMatrix2D()函数原型如下:

Mat cv::getRotationMatrix2D (Point2f center,
                             double angle,
                             double scale
                             )

center:图像旋转的中心位置。

angle:图像旋转的角度,单位为度,正值为逆时针旋转。

scale:两个轴的比例因子,可以实现旋转过程中的图像缩放,不缩放则输入1。

? ? ? ? 该函数输入旋转角度和旋转中心,返回图像旋转矩阵,返回值的数据类型为Mat类,是一个2*3的矩阵。如果我们已知图像旋转矩阵,那么可以自己生成旋转矩阵而不调用该函数。函数生成的旋转矩阵与旋转角度和旋转中心的关系式:

在确定旋转矩阵后,通过warpAffine()函数进行仿射变换,就可以实现图像的旋转,函数原型如下:

void cv::warpAffine(InputArray src,
                    OutputArray dst,
                    InputArray M,
                    Size dsize,
                    int flags = INTER_LINEAR,
                    int borderMode = BORDER_CONSTANT,
                    const Scalar& borderValue = Scalar()
                    )

src:输入图像。

dst:仿射变换后输出图像,与src数据类型相同,尺寸与dsize相同。

M:2*3的变换矩阵。

dsize:输出图像的尺寸。

flags:插值方法标志,可选参数集含义在下表中给出。

borderMode:像素边界外推方法的标志。

borderValue:填充边界使用的数值,默认情况下为0。

图像仿射变换插值方法标志
方法标志简记作用
WARP_FILL_OUTLIERS8填充所有输出图像的像素,如果部分像素落在输入图像的边界外,则它们的值设定为fillval。
WARP_INVERSE_MAP16设置为M输出图像到输入图像的反变换。
边界外推方法标志
方法标志简记作用
BORDER_CONSTANT0用特定值填充,如iiiiiii|abcdefgh|iiiiiii
BORDER_REPLICATE1两端复制填充,如aaaaaa|abcdefgh|hhhhhhh
BORDER_REFLECT2

倒序填充,如fedcba|abcdefgh|hgfedcba

BORDER_WRAP3正序填充,如cdefgh|abcdefgh|abcdefg
BORDER_REFLECT_1014不包含边界值的倒序填充,如gfedcb|abcdefgh|gfedcba
BORDER_TRANSPARENT5随机填充,uvwxyz|abcdefgh|ijklmno
BORDER_REFLECT1016与BORDER_REFLECT_101相同
BORDER_DEFAULT7与BORDER_REFLECT_101相同
BORDER_ISOLATED8不关心感兴趣区域之外的部分

? ? ? ? 此外仿射变换又称为三点变换。如果知道变换前后两幅图像中3个像素点坐标的对应关系,就可以求得仿射变换中的变换矩阵M。OpenCV中提供了利用三个对应像素点来确定变换矩阵M函数getAffineTransform(),该函数的原型如下:

Mat cv::getAffineTransform(const Point2f src[],
                           const Point2f dst[],
                            )

src[]:源图像中的3个像素坐标。

dst[]:目标图像中的3个像素坐标。

? ? ? ? 该函数两个输入量都是存放浮点多表的数组,在生成数组的时候,与像素点的输入顺序无关,但是需要保证像素点的对应关系,函数返回值是一个2*3的变换矩阵。

代码实例:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace std;
using namespace cv;

int main()
{	
	Mat img = imread("D:\\lena.jpg");
	if (img.empty())
	{
		cout << "请确认图像的文件名字是否正确" << endl;
		return -1;
	}

	Mat rotation0, totation1, img_warp0, img_warp1;
	double angle = 30; //设置图像的翻转角度
	Size dst_size(img.rows, img.cols);   //设置输出图像的尺寸
	Point2f center(img.rows / 2.0, img.cols / 2.0);    //设置图像的旋转中心
	rotation0 = getRotationMatrix2D(center, angle, 1);
	warpAffine(img, img_warp0, rotation0, dst_size);
	imshow("img_warp()", img_warp0);
	waitKey(0);
	return 0;
}

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:14:10  更:2021-10-06 12:14:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:42:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码