计算机视觉-图像视觉作业-作业5

计算机视觉作业-作业5

参考教材相应章节内容,完成以下实践内容:

1、缩放操作

2、翻转操作

3、平移操作

4、旋转操作

5、倾斜操作

6、透视操作


  1. 缩放操作

1.1 将图像按照指定宽高进行缩放;

代码:

1
2
3
4
5
6
7
import cv2
img = cv2.imread("lena.bmp") # 读取图像
dst1 = cv2.resize(img, (100, 100)) # 按照宽100像素、高100像素的大小进行缩放
dst2 = cv2.resize(img, (400, 400)) # 按照宽400像素、高400像素的大小进行缩放
cv2.imwrite("1.1.1.jpg",img) # 保存原图图像
cv2.imwrite("1.1.2.jpg",dst1)
cv2.imwrite("1.1.3.jpg",dst2)

效果图:

1.1.1.jpg
1.1.2.jpg
1.1.3.jpg

1.2 指定比例进行缩放;

代码:

1
2
3
4
5
6
7
8
import cv2
img = cv2.imread("lena.bmp") # 读取图像
dst3 = cv2.resize(img, None, fx=1 / 3, fy=1 / 2) # 将宽缩小到原来的1/3、高缩小到原来的1/2
dst4 = cv2.resize(img, None, fx=1.5, fy=1.5) # 将宽高扩大1.5倍
cv2.imwrite("1.2.1.jpg",img)
cv2.imwrite("1.2.2.jpg",dst3)
cv2.imwrite("1.2.3.jpg",dst4)

效果图:

1.2.1.jpg
1.2.2.jpg
1.2.3.jpg
  1. 翻转操作

实现多种不同翻转效果;

2.1 垂直翻转

2.2 水平翻转

2.3 对角线翻转

代码:

1
2
3
4
5
6
7
8
9
10
import cv2
img = cv2.imread("lena.bmp") # 读取图像
dst1 = cv2.flip(img, 0) # 沿X轴翻转
dst2 = cv2.flip(img, 1) # 沿Y轴翻转
dst3 = cv2.flip(img, -1) # 同时沿X轴、Y轴翻转
cv2.imwrite("2.0.jpg",img)
cv2.imwrite("2.1.jpg",dst1)
cv2.imwrite("2.2.jpg",dst2)
cv2.imwrite("2.3.jpg",dst3)

效果图:

2.0.jpg
2.1.jpg
2.2.jpg
2.3.jpg
  1. 平移操作

实现图像向不同方向平移效果;

3.1 横坐标向右移动50像素 纵坐标向下移动100像素

3.2 横坐标不变 纵坐标向上移动50像素

3.3 横坐标向左移动200像素 纵坐标不变

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2
import numpy as np
img = cv2.imread("lena.bmp") # 读取图像
rows = len(img) # 图像像素行数
cols = len(img[0]) # 图像像素列数
M1 = np.float32([[1, 0, 50], # 横坐标向右移动50像素
[0, 1, 100]]) # 纵坐标向下移动100像素
M2 = np.float32([[1, 0, 0], # 横坐标不变
[0, 1, 100]]) # 纵坐标向上移动50像素
M3 = np.float32([[1, 0, 50], # 横坐标向左移动200像素
[0, 1, 100]]) # 纵坐标不变
dst1 = cv2.warpAffine(img, M1, (cols, rows))
dst2 = cv2.warpAffine(img, M2, (cols, rows))
dst3 = cv2.warpAffine(img, M3, (cols, rows))
cv2.imwrite("3.0.jpg",img)
cv2.imwrite("3.1.jpg",dst1)
cv2.imwrite("3.2.jpg",dst2)
cv2.imwrite("3.3.jpg",dst3)

效果图:

3.0.jpg
3.1.jpg
3.2.jpg
3.3.jpg
  1. 旋转操作

实现图像逆时针旋转效果;

代码:

1
2
3
4
5
6
7
8
9
import cv2
img = cv2.imread("lena.bmp") # 读取图像
rows = len(img) # 图像像素行数
cols = len(img[0]) # 图像像素列数
center = (rows / 2, cols / 2) # 图像的中心点
M = cv2.getRotationMatrix2D(center, 30, 0.8) # 以图像为中心,逆时针旋转30度,缩放0.8倍
dst = cv2.warpAffine(img, M, (cols, rows)) # 按照M进行仿射
cv2.imwrite("4.0.jpg",img)
cv2.imwrite("4.1.jpg",dst)

效果图:

4.0.jpg
4.1.jpg
  1. 倾斜操作

实现图像分别向左和右倾斜效果;

5.1 图像右倾斜

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
import numpy as np
img = cv2.imread("lena.bmp") # 读取图像
rows = len(img) # 图像像素行数
cols = len(img[0]) # 图像像素列数
p1 = np.zeros((3, 2), np.float32) # 32位浮点型空列表,原图三个点
p1[0] = [0, 0] # 左上角点坐标
p1[1] = [cols - 1, 0] # 右上角点坐标
p1[2] = [0, rows - 1] # 左下角点坐标
p2 = np.zeros((3, 2), np.float32) # 32位浮点型空列表,倾斜图三个点
p2[0] = [50, 0] # 左上角点坐标,向右挪50像素
p2[1] = [cols - 1, 0] # 右上角点坐标,位置不变
p2[2] = [0, rows - 1] # 左下角点坐标,位置不变
M = cv2.getAffineTransform(p1, p2) # 根据三个点的变化轨迹计算出M矩阵
dst = cv2.warpAffine(img, M, (cols, rows)) # 按照M进行仿射
cv2.imwrite("5.0.jpg",img)
cv2.imwrite("5.1.jpg",dst)

效果图:

5.0.jpg
5.1.jpg

5.2 图像左倾斜

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
import numpy as np
img = cv2.imread("lena.bmp") # 读取图像
rows = len(img) # 图像像素行数
cols = len(img[0]) # 图像像素列数
p1 = np.zeros((3, 2), np.float32) # 32位浮点型空列表,原图三个点
p1[0] = [0, 0] # 左上角点坐标
p1[1] = [cols - 1, 0] # 右上角点坐标
p1[2] = [0, rows - 1] # 左下角点坐标
p2 = np.zeros((3, 2), np.float32) # 32位浮点型空列表,倾斜图三个点
p2[0] = [0, 0] # 左上角点坐标,向右挪50像素
p2[1] = [cols - 51, 0] # 右上角点坐标,位置不变
p2[2] = [50, rows - 1] # 左下角点坐标,位置不变
M = cv2.getAffineTransform(p1, p2) # 根据三个点的变化轨迹计算出M矩阵
dst = cv2.warpAffine(img, M, (cols, rows)) # 按照M进行仿射
cv2.imwrite("5.0.jpg",img)
cv2.imwrite("5.2.jpg",dst)

图像图:

5.0.jpg
5.2.jpg
  1. 透视操作

模拟从底部观察图像得到的透视效果;

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2
import numpy as np
img = cv2.imread("lena.bmp") # 读取图像
rows = len(img) # 图像像素行数
cols = len(img[0]) # 图像像素列数
p1 = np.zeros((4, 2), np.float32) # 32位浮点型空列表,保存原图四个点
p1[0] = [0, 0] # 左上角点坐标
p1[1] = [cols - 1, 0] # 右上角点坐标
p1[2] = [0, rows - 1] # 左下角点坐标
p1[3] = [cols - 1, rows - 1] # 右下角点坐标
p2 = np.zeros((4, 2), np.float32) # 32位浮点型空列表,保存透视图四个点
p2[0] = [90, 0] # 左上角点坐标,向右移动90像素
p2[1] = [cols - 90, 0] # 右上角点坐标,向左移动90像素
p2[2] = [0, rows - 1] # 左下角点坐标,位置不变
p2[3] = [cols - 1, rows - 1] # 右下角点坐标,位置不变
M = cv2.getPerspectiveTransform(p1, p2) # 根据四个点的变化轨迹计算出M矩阵
dst = cv2.warpPerspective(img, M, (cols, rows)) # 按照M进行仿射
cv2.imwrite("6.0.jpg",img)
cv2.imwrite("6.1.jpg",dst)

效果图:

6.0.jpg
6.1.jpg

计算机视觉-图像视觉作业-作业5
https://yelelalearn.github.io/2024/04/09/计算机视觉-图像视觉作业-作业5/
作者
Yelearn
发布于
2024年4月9日
更新于
2024年4月17日
许可协议