基于OpenCV的二维仿射矩阵变换

本文通过代码展示了如何使用OpenCV实现二维图像的仿射变换。通过矩阵相乘,将原图像的坐标映射到新图像上,但未进行插值处理,导致放大时图像模糊。需要注意图像尺寸限制,防止矩阵运算超出目标图像范围。
摘要由CSDN通过智能技术生成

         仿射变换矩阵表示,如下图,来源于《数字图像处理》。
在这里插入图片描述
在这里插入图片描述
分析:
         以下代码,主要就是两个矩阵相乘,其中point表示图片中的[ v , w , 1 ],而matrix0表示T。其中,point和matrix0矩阵中的值是指im读取图像的x、y坐标值。逻辑就是,将原图im中的坐标,经过point和matrix0叉乘后得到的新坐标值result,再将im旧的坐标值映射到新的图像im3中显示。
         注意:以下代码,im读取的图像尺寸不能够太大,否则无法在im3的尺寸中显示,测试读取的图像大小63X92。
         直接看代码吧,以下代码的主要功能就是利用OpenCV的Mat练习二维图像的仿射变换,

//测试图像的变换矩阵
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;

Mat im = imread("D://dog2.png");//
Mat i
OpenCV中,点的仿射变换是指使用仿射变换矩阵对图像中的点进行变换仿射变换是一种二维线性变换,它包括旋转、缩放、平移和剪切等操作,但保持图像中的点共线性和相对距离不变。要对一个点进行仿射变换,通常需要使用一个3x3的仿射变换矩阵。 在OpenCV中,仿射变换可以通过`cv2.warpAffine`函数来实现。该函数的第一个参数是源图像,第二个参数是变换矩阵,第三个参数是输出图像的尺寸,可以通过源图像的尺寸来设定。 以下是仿射变换矩阵的一个基本例子: ``` | a11 a12 a13 | | a21 a22 a23 | | 0 0 1 | ``` 在这个矩阵中,`a11`和`a22`控制着缩放,`a12`和`a21`控制着旋转和剪切,而`a13`和`a23`控制着平移。这里的点 `(x', y')` 是经过仿射变换后的坐标,而 `(x, y)` 是变换前的坐标: ``` x' = a11*x + a12*y + a13 y' = a21*x + a22*y + a23 ``` 使用OpenCV进行点的仿射变换的基本步骤如下: 1. 定义变换矩阵。 2. 使用`cv2.warpAffine`函数应用仿射变换。 代码示例可能如下: ```python import cv2 import numpy as np # 定义仿射变换矩阵,这里以平移为例 translation_matrix = np.array([[1, 0, 10], [0, 1, 20], [0, 0, 1]], dtype=np.float32) # 读取图像 image = cv2.imread('path_to_image.jpg') # 应用仿射变换 transformed_image = cv2.warpAffine(image, translation_matrix, (width, height)) ``` 在上述代码中,`translation_matrix`是一个表示平移操作的变换矩阵,其中`10`和`20`分别表示在水平和垂直方向上的平移量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值