Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV与仿射变换

OpenCV与仿射变换

作者头像
种花家的奋斗兔
发布于 2020-11-12 12:11:24
发布于 2020-11-12 12:11:24
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

OpenCV与仿射变换

拉伸、收缩、扭曲、旋转是图像的几何变换,在三维视觉技术中大量应用到这些变换,又分为仿射变换和透视变换。

由图可以看出,仿射变换是透视变换的子集。

仿射变换包括平移,旋转,缩放。

相关函数:

1.getAffineTransform

由三对点计算仿射变换

src:输入图像的三角形顶点坐标。

dst:输出图像的相应的三角形顶点坐标。 返回一个2x3的变换矩阵。

2.warpAffine函数

对图像做仿射变换

src:输入图像.

dst:输出图像.

map_matrix:2×3 变换矩阵

flags:插值方法和以下开关选项的组合

代码参考https://www.cnblogs.com/wyuzl/p/7865536.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

/// 全局变量
char* source_window = "Source image";
char* warp_window = "Warp";
char* warp_rotate_window = "Warp + Rotate";

/** @function main */
 int main( int argc, char** argv )
 {
   Point2f srcTri[3];
   Point2f dstTri[3];

   Mat rot_mat( 2, 3, CV_32FC1 );
   Mat warp_mat( 2, 3, CV_32FC1 );
   Mat src, warp_dst, warp_rotate_dst;

   /// 加载源图像
   src = imread( argv[1], 1 );

   /// 设置目标图像的大小和类型与源图像一致
   warp_dst = Mat::zeros( src.rows, src.cols, src.type() );

   /// 设置源图像和目标图像上的三组点以计算仿射变换
   srcTri[0] = Point2f( 0,0 );
   srcTri[1] = Point2f( src.cols - 1, 0 );
   srcTri[2] = Point2f( 0, src.rows - 1 );

   dstTri[0] = Point2f( src.cols*0.0, src.rows*0.33 );
   dstTri[1] = Point2f( src.cols*0.85, src.rows*0.25 );
   dstTri[2] = Point2f( src.cols*0.15, src.rows*0.7 );

   /// 求得仿射变换
   warp_mat = getAffineTransform( srcTri, dstTri );

   /// 对源图像应用上面求得的仿射变换
   warpAffine( src, warp_dst, warp_mat, warp_dst.size() );

   /** 对图像扭曲后再旋转 */

   /// 计算绕图像中点顺时针旋转50度缩放因子为0.6的旋转矩阵
   Point center = Point( warp_dst.cols/2, warp_dst.rows/2 );
   double angle = -50.0;
   double scale = 0.6;

   /// 通过上面的旋转细节信息求得旋转矩阵
   rot_mat = getRotationMatrix2D( center, angle, scale );

   /// 旋转已扭曲图像
   warpAffine( warp_dst, warp_rotate_dst, rot_mat, warp_dst.size() );

   /// 显示结果
   namedWindow( source_window, CV_WINDOW_AUTOSIZE );
   imshow( source_window, src );

   namedWindow( warp_window, CV_WINDOW_AUTOSIZE );
   imshow( warp_window, warp_dst );

   namedWindow( warp_rotate_window, CV_WINDOW_AUTOSIZE );
   imshow( warp_rotate_window, warp_rotate_dst );

   /// 等待用户按任意按键退出程序
   waitKey(0);

   return 0;
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图像处理的仿射变换与透视变换
  这一周主要在研究图像的放射变换与透视变换,目前出现的主要问题是需要正确识别如下图中的编码标志点圆心。 1.当倾斜角较小时:
3D视觉工坊
2020/12/11
1.5K0
图像处理的仿射变换与透视变换
图像各向异性滤波
各向异性概念 各向异性(英文名称:anisotropy)是指材料在各方向的力学和物理性能呈现差异的特性。晶体的各向异性即沿晶格的不同方向,原子排列的周期性和疏密程度不尽相同,由此导致晶体在不同方向的物理化学特性也不同,这就是晶体的各向异性。亦称“非均质性”。物体的全部或部分物理、化学等性质随方向的不同而各自表现出一定的差异的特性。即在不同的方向所测得的性能数值不同。对图像来说各向异性就是在每个像素点周围四个方向上梯度变化都不一样,滤波的时候我们要考虑图像的各向异性对图像的影响,而各向同性显然是说各个方向的
OpenCV学堂
2018/04/04
2.4K0
图像各向异性滤波
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
  图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:
vv彭
2020/10/27
4.1K0
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换
    


OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
【opencv实践】仿射变换和透视变换
上面这副图就是我们今天要处理的了,我们想把它从拍照视角变成鸟瞰图,这是机器人导航中的常用手段,以便在该平面上进行规划和导航。
周旋
2020/06/04
5.7K1
实战 | OpenCV实现多角度模板匹配(详细步骤 + 代码)
本文将介绍使用OpenCV实现多角度模板匹配的详细步骤 + 代码。(来源公众号:OpenCV与AI深度学习)
Color Space
2022/05/26
13.7K0
实战 | OpenCV实现多角度模板匹配(详细步骤 + 代码)
C#使用OpenCV进行答题卡识别
type表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数),由type()返回,但是返回值是int型,不是OpenCV预定义的宏(CV_8UC1, CV_64FC1…),也就是说你用type函数得到的只是一个int型的数值,比如CV_8UC1返回的值是0,而不是CV_8UC1。
码客说
2022/09/09
2.9K1
C#使用OpenCV进行答题卡识别
【5】OpenCV2.4.9实现图像拼接与融合方法【SURF、SIFT、ORB、FAST、Harris角点 、stitch 】
本文出现的数据结果和码源见:https://download.csdn.net/download/sinat_39620217/18269470
汀丶人工智能
2022/12/21
3K0
【5】OpenCV2.4.9实现图像拼接与融合方法【SURF、SIFT、ORB、FAST、Harris角点 、stitch 】
【从零学习OpenCV 4】图像仿射变换
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/11/30
9540
常用数据增广方法,解决数据单一问题
寄语:本文将对传统图像算法的数据增广方式进行学习,以最常用的平移和旋转为例,帮助大家梳理几何变换的概念和应用,并对其在OpenCV的框架下进行了实现。
Datawhale
2020/05/29
2.4K0
OpenCV极坐标变换函数warpPolar的使用
前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是OCR的识别比较好,因为本身骨钉的字符是按圆印上去的,直接截取图片进行OCR没法识别,需要经过图像处理后再识别,所以这篇就是学习一下OpenCV的极坐标变换函数。
Vaccae
2023/12/14
5260
OpenCV极坐标变换函数warpPolar的使用
OpenCV消除高亮illuminationChange函数的使用
上一篇《OpenCV极坐标变换函数warpPolar的使用》中介绍了极坐标变换的使用,文中提到过因为手机拍的照片,部分地方反光厉害。OpenCV本身也有一个消除高亮的函数,今天这篇就是来了解一下消除高亮函数的使用,就结果来说,有效果,但不多。
Vaccae
2023/12/19
1.8K0
OpenCV消除高亮illuminationChange函数的使用
C#调用OpenCV开发简易版美图工具
本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作。
Kiba518
2019/10/09
2K0
C#调用OpenCV开发简易版美图工具
opencv图像角点提取
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179735.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
5720
OpenCV图像处理笔记(二):图片操作进阶
一、图像模糊 1、模糊原理 Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算 通常这
MiChong
2020/09/24
1.2K0
OpenCV图像处理笔记(二):图片操作进阶
OpenCV 图片缩放
对图像进行缩放的最简单方法就是调用OpenCV中resize函数。resize函数可以将源图像精确地转化为指定尺寸的目标图像。要缩小图像,一般推荐使用CV_INETR_AREA来插值;若要放大图像,推荐使用CV_INTER_LINEAR。
AI异构
2020/07/29
3.6K0
OpenCV 图片缩放
【走进OpenCV】重映射与仿射变换
其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的。
小白学视觉
2019/10/24
1.2K0
OpenCV图像处理03-矩阵的掩膜操作
03-矩阵的掩膜操作 #include<opencv2/opencv.hpp> #include<iostream> #include<math.h> using namespace std; using namespace cv; int main() { Mat src, dst; src = imread("D:\\heroRcData\\opencvProject\\arrowImg\\01\\01.jpg"); if (!src.data) { cout << "could not lo
yangjiao
2021/03/04
3420
【失败也分享】C++ OpenCV人脸Delaunay三角形提取及仿射变换的使用
最近这几篇OpenCV相关的文章都是与人脸有关,其实最主要是就是想做人脸替换的小试验,大概流程是:
Vaccae
2021/03/12
1.7K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
一、霍夫直线变换 1、霍夫直线变换 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 2、霍夫直线变换介绍 对于任意一条直线上的所有点来说 变换到极坐标中,从[0~360]空间,可以得到r的大小 属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线 3、相关API 标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是
MiChong
2020/09/24
3.1K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
【OpenCV】Chapter3.图像的仿射变换
仿射变换其实包含了一系列的操作:平移,缩放,旋转等,不过所有的操作都可以通过这个仿射变换矩阵来实现。
zstar
2022/09/22
1.3K0
【OpenCV】Chapter3.图像的仿射变换
推荐阅读
相关推荐
图像处理的仿射变换与透视变换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验