图像的几何变换实验

一、 实验目的:

1. 熟悉MATLABOpenCV的操作和基本功能;
2. 理解和掌握图像的平移、垂直镜像变换、水平镜像变换、缩放和旋转的原理和应用;

二、实验原理:

1.初始坐标为(x,y)的点经过平移(x0,y0),坐标变为(x',y'),两点之间的关系为:
在这里插入图片描述
以矩阵形式表示为∶
在这里插入图片描述
2.图像的镜像变换是以图象垂直中轴线或水平中轴线交换图像的变换,分为垂直镜像变换和水平镜像变换,两者的矩阵形式分别为∶
在这里插入图片描述
3.图像缩小和放大变换矩阵相同∶
在这里插入图片描述
S_x≤1,S_y≤1时,图像缩小;S_x≥1,S_y≥1时,图像放大。

4.图像旋转定义为以图像中某一点为原点以逆时针或顺时针方向旋转一定角度。其变换矩阵为∶
在这里插入图片描述
该变换矩阵是绕坐标轴原点进行的,如果是绕一个指定点(a,b)旋转,则现要将坐标系平移到该点,进行旋转,然后再平移回到新的坐标原点。

三、实验内容步骤(记录实验主要步骤,且在调试成功后,将结果截屏或拍照保存) 要求使用MATLABOpenCV来完成以下实验。

1.对图像进行平移变换;
# 导包
import cv2
import numpy as np
lena = cv2.imread("./lena.jpg")  # 读取原图
height, width = lena.shape[:2]  # 获取图像的高度和宽度
x = 100
y = 200
M = np.float32([[1, 0, x], [0, 1, y]])
Panned_lena = cv2.warpAffine(lena, M, (width, height))
cv2.imshow("原始图像", lena)
cv2.imshow("平移图像", Panned_lena)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

2.对图像进行垂直镜像变换;
import cv2
lena = cv2.imread("./lena.jpg")
vertical_mirror_lena = cv2.flip(lena, 1)
cv2.imshow("原始图像", lena)
cv2.imshow("垂直镜像图像", vertical_mirror_lena)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

3.对图像进行水平镜像变换;
import cv2
lena = cv2.imread("./lena.jpg")
horizontal_mirror_lena = cv2.flip(lena, 0)
cv2.imshow("原始图像", lena)
cv2.imshow("水平镜像翻转图像", horizontal_mirror_lena)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

4.对图像进行缩放和旋转操作。
import cv2
lena = cv2.imread('./lena.jpg')  # 读入原始图像
print(lena.shape)   # 打印出图片尺寸
x, y = lena.shape[0:2]  # 将图片高和宽分别赋值给x,y
cv2.imshow('原始图像', lena)    # 显示原图

# 缩放到原来的二分之一
lena_zoom_1 = cv2.resize(lena, (int(y / 2), int(x / 2)))
cv2.imshow('缩放至原来二分之一的图像', lena_zoom_1)
cv2.waitKey()

# 缩放到原来的四分之一
lena_zoom_2 = cv2.resize(lena, (0, 0), fx=0.25, fy=0.25,
                         interpolation=cv2.INTER_NEAREST)
cv2.imshow('缩放到原来的四分之一的图像', lena_zoom_2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
lena = cv2.imread("./lena.jpg")  # 读取原图
height, width = lena.shape[:2]  # 获取图像的高度和宽度
# 以图像中心为圆点,逆时针旋转 45°,并将目标图像缩小为原始图像的 0.7 倍
M = cv2.getRotationMatrix2D((width/2, height/2), 45, 0.7)
rotate_lena = cv2.warpAffine(lena, M, (width, height))
cv2.imshow("原始图像", lena)
cv2.imshow("旋转图像", rotate_lena)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51571728/article/details/124796655