画像の幾何学的変換実験

1. 実験の目的:

1.MATLABまたはOpenCVの操作と基本機能に精通している;
2. 画像の変換、垂直ミラー変換、水平ミラー変換、拡大縮小および回転の原理と応用を理解し、習得している。

2. 実験原理:

1. 初期座標の点が(x,y)平行移動され(x0,y0)、座標は となり(x',y')、2 点間の関係は
ここに画像の説明を挿入
行列形式で表されます。
ここに画像の説明を挿入
2. 画像の鏡像変換は、画像を垂直中心と交換する変換です。 3.画像の縮小と拡大の変換行列は同じです。
ここに画像の説明を挿入
その
ここに画像の説明を挿入
ときS_x≤1,S_y≤1、画像は縮小されます。 ;S_x≥1,S_y≥1時に画像が拡大されます。

4. 画像の回転とは、画像内の特定の点を原点として、反時計回りまたは時計回りに一定の角度だけ回転させることです。その変換行列は次のとおりです:
ここに画像の説明を挿入
変換行列は座標軸の原点を中心に実行されます。(a,b)指定された点の周りを回転する場合、座標系はこの点まで変換され、回転され、その後新しい座標に変換される必要があります。元。

3. 実験内容のステップ (実験の主なステップを記録し、デバッグが成功したら、スクリーンショットを撮るか、結果の写真を撮って保存します)以下の実験を使用するMATLABか、完了する必要があります。OpenCV

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