仿射变换--getAffineTransform和wrapAffine

2023-12-30 00:36

本文主要是介绍仿射变换--getAffineTransform和wrapAffine,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仿射变换--getAffineTransform和wrapAffine

  • 介绍
    • 示例代码

介绍

官网使用介绍:
Affine Transformations
getAffineTransform
wrapAffine

构建仿射变换矩阵, 需要传入原始3个点和目标3个点:
在这里插入图片描述

示例代码

以下代码摘自CenterNet,使用cv2实现获取仿射变换矩阵:

import cv2# 获取第三个点
def get_3rd_point(a, b):direct = a - breturn b + np.array([-direct[1], direct[0]], dtype=np.float32)# 获取旋转方向
def get_dir(src_point, rot_rad):sn, cs = np.sin(rot_rad), np.cos(rot_rad)src_result = [0, 0]src_result[0] = src_point[0] * cs - src_point[1] * snsrc_result[1] = src_point[0] * sn + src_point[1] * csreturn src_result# 获取仿射变化矩阵
def get_affine_transform(center,scale,rot,output_size,shift=np.array([0, 0], dtype=np.float32),inv=0):'''center:原始图像的中心点scale:原始图像缩放后的宽和高rot:旋转角度output_size:输出图像的宽和高shift:偏移量inv:是否为逆变换。'''if not isinstance(scale, np.ndarray) and not isinstance(scale, list):scale = np.array([scale, scale], dtype=np.float32)scale_tmp = scalesrc_w = scale_tmp[0]dst_w = output_size[0]dst_h = output_size[1]rot_rad = np.pi * rot / 180src_dir = get_dir([0, src_w * -0.5], rot_rad) # 构建原始偏移向量,加入旋转dst_dir = np.array([0, dst_w * -0.5], np.float32) # 构建目标偏移向量src = np.zeros((3, 2), dtype=np.float32)dst = np.zeros((3, 2), dtype=np.float32)src[0, :] = center + scale_tmp * shift # 构建原始第一个点src[1, :] = center + src_dir + scale_tmp * shift # 构建原始第二个点dst[0, :] = [dst_w * 0.5, dst_h * 0.5] # 构建目标第一个点,为目标图像的中心点dst[1, :] = np.array([dst_w * 0.5, dst_h * 0.5], np.float32) + dst_dir # 构建目标第二个点src[2:, :] = get_3rd_point(src[0, :], src[1, :]) # 构建原始第三个点 输入a,b两个点 计算获得垂直于ab的第3个点dst[2:, :] = get_3rd_point(dst[0, :], dst[1, :]) # 构建目标第三个点if inv:trans = cv2.getAffineTransform(np.float32(dst), np.float32(src))else:trans = cv2.getAffineTransform(np.float32(src), np.float32(dst))return trans

使用变换矩阵处理图像img

out = cv2.warpAffine(img, trans_input, (input_w, input_h),flags=cv2.INTER_LINEAR)

使用变换矩阵转换点坐标:

def affine_transform(pt, t):new_pt = np.array([pt[0], pt[1], 1.], dtype=np.float32).Tnew_pt = np.dot(t, new_pt)return new_pt[:2]point = [2.0, 3.0]
affine_transform(point, trans_input)

这篇关于仿射变换--getAffineTransform和wrapAffine的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551176

相关文章

Halcon 几何变换之仿射变换

几何变换包括仿射变换、投影变换、图像变换以及极坐标变换。不同的资料可能会有不同的划分。它们具体的数学表达感性趣的可以自己查找。这里只描述Halcon的仿射变换运用。 Halcon中的放射变换常用的两种方式:旋转以及缩放(当然平移也常用,但是不属于仿射变换)。变换涉及到三个量,一个是待变换的图像或者说矩阵,一个变换矩阵,以及变换后的图像或者矩阵。所以在Halcon中会有两种运用方式。第一种:已知待

halcon 仿射变换功能函数,

1.仿射变换有:平移、旋转、缩放、斜切。 2.要进行仿射变换,必须先获取变换矩阵。要获取变换矩阵,必须先获取特征点坐标、角度等信息,几何匹配和bolb是获取特征点的高效方法,除此之外还有其它方法,只要能稳定的求出特征点即可。 3.仿射变换流程    (1.)获取特征点坐标、角度    (2.)计算仿射变换矩阵    (3.)对图像、区域、轮廓进行仿射变换 4.根据特征点、角度计算仿射变

图像处理之仿射变换

仿射变换 什么是仿射变换仿射变换有什么用 什么是仿射变换 仿射变换(原图和一个矩阵进行运算)是指在几何中,图像从一个向量空间经过一次线性变换和一次平移,映射到另一个向量空间的过程。 这种变换可以保持图像的“平直性”和“平行性”,即直线经过仿射变换后仍然是直线,平行线经过变换后仍然保持平行。 仿射变换有什么用 图像校正: 当图像由于相机角度、镜头畸变或其他因素产生透视变形时,

OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ImgTrans(仿射变换)

本系列学习笔记参考自OpenCV2.4.10之opencv\sources\samples\cpp\tutorial_code和http://www.opencv.org.cn/opencvdoc/2.3.2/html/genindex.html 本博文将继续学习opencv-tutorial-code中的ImgTrans,这里讲主要介绍仿射变换。仿射变换是直角坐标系的一种,描述的是一

OpenCV几何图像变换(9)仿射变换函数warpAffine()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 函数是应用一个仿射变换到图像上。 warpAffine 函数使用指定的矩阵对源图像进行仿射变换: dst ( x , y ) = src ( M 11 x + M 12 y + M 13 , M 21 x + M 22 y + M 23 )

EmguCV学习笔记 C# 5.2 仿射变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客 笔者的

OpenCV几何图像变换(2)计算仿射变换矩阵的函数getAffineTransform()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 计算三对对应点之间的仿射变换。 该函数计算 2×3 的仿射变换矩阵,使得: [ x i ′ y i ′ ] = map_matrix ⋅ [ x i y i 1 ] \begin{bmatrix} x'_i \\ y'_i \end{bmat

opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移

常常需要对图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标。 仿射变换在:http://blog.csdn.net/xiaowei_cqu/article/details/7616044 这位大牛的博客中已经介绍的非常清楚。 关于仿射变换的详细介绍,请见上面链接的博客。

opencv 仿射变换实例

opencv 仿射变换实例 1.在一张空白图上创建四个随机点2.直接使用opencv自带的warpAffine3.显示原图所有像素的warpAffine之14.显示原图所有像素的warpAffine之2参考文献 通过实例展示opencv的仿射变换及其应用。 这里需要注意的是哪个维度是x,哪个维度是y。 ..........x...y 这个定义与矩阵的x,y维度不一致

仿射变换的意义

仿射变换(Affine Transformation或 Affine Map)是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。放射变换可以写为如下的形式: