• OpenCV自学笔记八:几何变换


    1. 缩放(Scale):

    缩放是指改变图像的尺寸大小。在OpenCV中,可以使用`cv2.resize()`函数来实现图像的缩放操作。该函数接受源图像、目标图像大小以及插值方法作为参数。

    示例代码:i

    1. mport cv2
    2. # 读取图像
    3. image = cv2.imread('input.jpg')
    4. # 缩放图像
    5. resized_image = cv2.resize(image, (800, 600))
    6. # 显示图像
    7. cv2.imshow('Resized Image', resized_image)
    8. cv2.waitKey(0)
    9. cv2.destroyAllWindows()

    2. 翻转(Flip):

    翻转是指将图像按照水平或垂直方向进行镜像处理。在OpenCV中,可以使用`cv2.flip()`函数来实现图像的翻转操作。该函数接受源图像和翻转方式(0表示沿x轴翻转,1表示沿y轴翻转,-1表示同时沿x轴和y轴翻转)作为参数。

    示例代码:

    1. import cv2
    2. # 读取图像
    3. image = cv2.imread('input.jpg')
    4. # 水平翻转图像
    5. flipped_image = cv2.flip(image, 1)
    6. # 显示图像
    7. cv2.imshow('Flipped Image', flipped_image)
    8. cv2.waitKey(0)
    9. cv2.destroyAllWindows()

    3. 仿射变换(Affine Transformation):

    仿射变换是指通过线性变换和平移变换来改变图像的形状和位置。在OpenCV中,可以使用`cv2.warpAffine()`函数来实现仿射变换。该函数接受源图像、仿射矩阵以及目标图像大小作为参数。

    示例代码:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. image = cv2.imread('input.jpg')
    5. # 定义仿射矩阵
    6. matrix = np.float32([[1, 0, 100], [0, 1, 50]]) # 平移变换
    7. # 进行仿射变换
    8. affine_image = cv2.warpAffine(image, matrix, (image.shape[1], image.shape[0]))
    9. # 显示图像
    10. cv2.imshow('Affine Image', affine_image)
    11. cv2.waitKey(0)
    12. cv2.destroyAllWindows()

    4. 透视变换(Perspective Transformation):

    透视变换是指通过透视关系对图像进行形状的扭曲。在OpenCV中,可以使用`cv2.getPerspectiveTransform()`函数获取透视变换矩阵,并使用`cv2.warpPerspective()`函数来应用透视变换。该函数接受源图像、透视变换矩阵以及目标图像大小作为参数。

    示例代码:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. image = cv2.imread('input.jpg')
    5. # 定义原始图像中四个角点的坐标
    6. original_points = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
    7. # 定义目标图像中对应的四个角点的坐标
    8. target_points = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
    9. # 计算透视变换矩阵
    10. perspective_matrix = cv2.getPerspectiveTransform(original_points, target_points)
    11. # 进行透视变换
    12. perspective_image = cv2.warpPerspective(image, perspective_matrix, (300, 300))
    13. # 显示图像
    14. cv2.imshow('Perspective Image', perspective_image)
    15. cv2.waitKey(0)
    16. cv2.destroyAllWindows()

    5. 重映射(Remapping):

    重映射是指根据给定的映射关系,将图像中的像素重新定位到目标图像中的位置上。在OpenCV中,可以使用`cv2.remap()`函数来实现重映射操作。该函数接受源图像、x方向映射矩阵(map_x)和y方向映射矩阵(map_y)作为参数。

    示例代码:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. image = cv2.imread('input.jpg')
    5. # 定义映射关系
    6. rows, cols = image.shape[:2]
    7. map_x = np.zeros((rows, cols), np.float32)
    8. map_y = np.zeros((rows, cols), np.float32)
    9. for i in range(rows):
    10. for j in range(cols):
    11. # 将像素点的位置重新定位到目标图像中
    12. map_x[i, j] = j
    13. map_y[i, j] = i
    14. # 进行重映射
    15. remapped_image = cv2.remap(image, map_x, map_y, cv2.INTER_LINEAR)
    16. # 显示图像
    17. cv2.imshow('Remapped Image', remapped_image)
    18. cv2.waitKey(0)
    19. cv2.destroyAllWindows()

  • 相关阅读:
    OpenAI正式发布第一个官方.NET版本库的测试版
    线性代数的艺术
    PendingIntent
    7 张图解 CrashLoopBackOff,如何发现问题并解决它?
    RFID固定资产盘点系统给企业带来哪些便利?
    基于ssm的社区医院儿童预防接种管理系统设计与实现-计算机毕业设计源码+LW文档
    Python爬虫实战(基础篇)—13获取《人民网》【最新】【国内】【国际】写入Word(附完整代码)
    2022年4月最新面经答案总结(Java基础、数据库、JVM、计网、计操、集合、多线程、Spring)持续更新
    TLS/SSL 详解
    NVME在windows下速率下降
  • 原文地址:https://blog.csdn.net/m0_71721954/article/details/133123658