import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1.读取图片
print("欢迎来到图像放大、缩小、平移、旋转、仿射、透视小程序!")
pic_url = input("请输入你的图片所在文件路径(比如:./image/你的图片名.jpg):") # 个人的小创新,支持用户输入图片路径
img1 = cv.imread(pic_url)
print("图片导入成功!请留意弹窗转换结果!")
# 2.图像缩放
# 21绝对尺寸
rows, cols = img1.shape[:2]
res = cv.resize(img1, (2 * cols, 2 * rows), interpolation=cv.INTER_CUBIC)
# 2.2相对尺寸
res1 = cv.resize(img1, None, fx=0.5, fy=0.5)
# 3图像显示
# 3.1 使用 opencv 显示图像(不推荐)
cv.imshow("orignal", img1)
cv.imshow("enlarge", res)
cv.imshow("shrink)", res1)
cv.waitKey(0)
# 3.2 使用matplotlib 显示图像
plt.rc("font", family='Microsoft YaHei')
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100)
axes[0].imshow(res[:, :, ::-1])
axes[0].set_title("绝对尺度 (放大)")
axes[1].imshow(img1[:, :, ::-1])
axes[1].set_title("原图")
axes[2].imshow(res1[:, :, ::-1])
axes[2].set_title("相对尺度 (缩小)")
plt.show()
# 1.读取图像
img1 = cv.imread(pic_url)
# 2.图像平移
rows, cols = img1.shape[:2]
M = M = np.float32([[1, 0, 100], [0, 1, 50]]) # 平移矩阵
dst = cv.warpAffine(img1, M, (cols, rows))
# 3.图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img1[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:, :, ::-1])
axes[1].set_title("平移后结果")
plt.show()
# 1读取图像
img = cv.imread(pic_url)
# 2图像旋转
rows, cols = img.shape[:2]
# 2.1生成旋转矩阵
M = cv.getRotationMatrix2D((cols / 2, rows / 2), 90, 1)
# 2.2进行旋转变换
dst = cv.warpAffine(img, M, (cols, rows))
# 3图像展示
plt.rc("font", family='Microsoft YaHei')
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:, :, ::-1])
axes[1].set_title("旋转后结果")
plt.show()
# 1图像读取
img = cv.imread(pic_url)
# 2仿射变换
rows, cols = img.shape[:2]
# 2.1创建变换矩阵
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[100, 100], [200, 50], [100, 250]])
M = cv.getAffineTransform(pts1, pts2)
# 2.2完成仿射变换
dst = cv.warpAffine(img, M, (cols, rows))
# 3图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:, :, ::-1])
axes[1].set_title("仿射后结果")
plt.show()
# 1读取图像
img = cv.imread(pic_url)
# 2透射变换
rows, cols = img.shape[:2]
# 2.1创建变换矩阵
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[100, 145], [300, 100], [80, 290], [310, 300]])
T = cv.getPerspectiveTransform(pts1, pts2)
# 2.2进行变换
dst = cv.warpPerspective(img, T, (cols, rows))
# 3图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:, :, ::-1])
axes[1].set_title("透射后结果")
plt.show()
# 1图像读取
img = cv.imread(pic_url)
# 2进行图像采样
up_img = cv.pyrUp(img) # 上采样操作
img_1 = cv.pyrDown(img) # 下采样操作
# 3图像显示
cv.imshow('enlarge', up_img)
cv.imshow('original', img)
cv.imshow('shrink', img_1)
cv.waitKey(0)
cv.destroyAllWindows()
THE END
暂无评论内容