图像的几何变换

1.图像的缩放

python 复制代码
import cv2

# 读取图像
image = cv2.imread('D:\\photo\\lena.tif')

# 方法一:直接指定目标尺寸
resized_direct = cv2.resize(image, (800, 600))
cv2.imwrite('resized_opencv.jpg', resized_direct)

# 方法二:按比例缩放
# cv2.INTER_LINEAR(双线性插值):默认选项,速度和质量的良好平衡,适用于大多数放大场景
# cv2.INTER_CUBIC(双三次插值):比双线性插值计算量更大,结果更平滑,适用于大幅放大
# cv2.INTER_AREA:缩小图像时的推荐选项。它通过像素区域关系重采样,能在缩小图像时避免出现波纹(摩尔纹),更好地保留细节
# cv2.INTER_NEAREST(最近邻插值):速度最快,但效果粗糙,可能导致锯齿状边缘,通常只在需要保持像素完美对应关系(如像素艺术游戏)时使用
scale_percent = 50  # 缩小为原图的50%
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_by_percent = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
cv2.imwrite('D:\\photo\\resized_percent.jpg', resized_by_percent)

2.图像的旋转

旋转属于等距变换,变换后图像的长度和面积保持不变。既可以用来自动校正倾斜的文档,也能为数据增强创造更多训练样本。

python 复制代码
import cv2
import numpy as np

def rotate_image(image, angle):
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)

    # 获取旋转矩阵
    M = cv2.getRotationMatrix2D(center, angle, 1.0)

    # 计算旋转后图像的边界,避免内容被裁剪
    cos = np.abs(M[0, 0])
    sin = np.abs(M[0, 1])
    new_w = int((h * sin) + (w * cos))
    new_h = int((h * cos) + (w * sin))

    # 调整旋转矩阵的中心点
    M[0, 2] += (new_w / 2) - center[0]
    M[1, 2] += (new_h / 2) - center[1]

    # 执行旋转,并指定新图像的尺寸
    rotated = cv2.warpAffine(image, M, (new_w, new_h))
    return rotated

# 读取图像
img = cv2.imread('your_image.jpg')
# 逆时针旋转45度
rotated_img = rotate_image(img, 45)

# 显示结果
cv2.imshow('Rotated Image', rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.图像的翻转

python 复制代码
import cv2

# 读取图像
img = cv2.imread('your_image.jpg')

# 水平翻转
flip_horizontal = cv2.flip(img, 1)
# 垂直翻转
flip_vertical = cv2.flip(img, 0)
# 水平垂直同时翻转
flip_both = cv2.flip(img, -1)

# 显示结果(示例)
cv2.imshow('Original', img)
cv2.imshow('Horizontal Flip', flip_horizontal)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.图像的斜切变换

图像的斜切变换(Shear Transformation)是一种让图像在水平或垂直方向上发生倾斜的几何变换,会产生类似"推斜"的效果。图像在水平或垂直方向上发生倾斜,形状发生改变,但原本平行的边在变换后依然保持平行。水平斜切(图像沿水平方向倾斜)、垂直斜切(图像沿垂直方向倾斜)。其数学基础是通过变换矩阵实现像素坐标的重新计算。

python 复制代码
import cv2
import numpy as np

# 读取图像
img = cv2.imread("D:\\photo\\lena.tif")
height, width = img.shape[:2]

# 设置水平斜切系数,例如0.2(正值向右斜,负值向左斜)
shear_factor = 0.2
M = np.float32([[1, shear_factor, 0],
                [0, 1, 0]])

# 应用变换,并考虑斜切后图像会变宽,需要调整输出画布大小
new_width = width + int(height * abs(shear_factor))
sheared_img = cv2.warpAffine(img, M, (new_width, height))

cv2.imshow("Sheared Image", sheared_img)
cv2.waitKey(0)

如下图所示:

5.图像的投影变换

图像的投影变换是计算机视觉中一项强大的几何变换技术,它允许你从不同的视角来"观察"图像,常用于校正透视失真或创造透视效果。简单来说,投影变换(也叫透视变换)是将图像从一个视角投影到一个新的虚拟平面上的过程。它使用一个3x3的变换矩阵(单应性矩阵,Homography Matrix)来实现这种映射。日常生活中有很多应用:文档/车牌校正 :将从倾斜角度拍摄的文档或车牌图像,通过投影变换校正为规整的正方形或矩形视图,便于后续的OCR(光学字符识别)或分析。鸟瞰图生成 :在自动驾驶和机器人领域,将车载摄像头拍摄的前方道路图像转换为鸟瞰视角,可以极大方便路径规划和障碍物检测。这个过程也称为逆透视映射(IPM)。图像拼接:在创建全景图时,需要将不同视角拍摄的图像进行对齐。投影变换可以校正这些图像之间的透视差异,使它们能够无缝融合。

python 复制代码
import cv2
import numpy as np

# 1. 读取图像
img = cv2.imread('skewed_document.jpg')
height, width = img.shape[:2]

# 2. 定义4组对应点 (源点src 和 目标点dst)
# 源点 (src): 在倾斜图像上选取文档的四个角点,顺序为 [左上, 右上, 右下, 左下]
src_points = np.float32([[100, 50], [600, 50], [600, 390], [100, 390]])

# 目标点 (dst): 我们希望文档最终呈现的位置和大小,顺序必须与源点一致
# 这里我们定义一个新的矩形
dst_points = np.float32([[0, 0], [500, 0], [500, 400], [0, 400]])

# 3. 计算投影变换矩阵
M = cv2.getPerspectiveTransform(src_points, dst_points)

# 4. 应用变换
warped_img = cv2.warpPerspective(img, M, (500, 400)) # 输出图像尺寸为 (500, 400)

# 5. 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Warped Image', warped_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 可选:保存结果图像
# cv2.imwrite('corrected_document.jpg', warped_img)
相关推荐
零售ERP菜鸟2 小时前
安全与合规的确定性保障:构建“内置安全”的弹性防线
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
之歆2 小时前
什么是 AI Agent 详解 ?
人工智能·ai
Java后端的Ai之路2 小时前
【机器学习】-长尾分布解读指南
人工智能·机器学习·长尾分布
科创致远2 小时前
国内ESOP电子作业系统头部企业格局与科创致远技术发展历程
大数据·数据库·人工智能·嵌入式硬件·精益工程
聊聊科技2 小时前
无需额外人力硬件成本,AI代唱demo软件助力音乐人降低小样demo制作开支
人工智能
俊哥V2 小时前
AI一周事件(2026年01月07日-01月13日)
人工智能·ai
小真zzz2 小时前
ChatPPT与WPS AI深度产品对比:AI美化技术的全面较量
人工智能·powerpoint·wps·ppt·aippt·banana
会飞的老朱2 小时前
从被动应对到主动防控:大型制造集团安全管理数字化升级实践
人工智能·安全·制造·oa协同办公
跳跳糖炒酸奶2 小时前
第十二章、GPT2:Language Models are Unsupervised Multitask Learners(理论部分)
人工智能·语言模型·自然语言处理·llm·transformers·gpt2