• opencv 图像平移、缩放、旋转、翻转 图像仿射变换


    图像几何变换

    图像几何变换从原理上看主要包括两种:基于2x3矩阵的仿射变换(平移、缩放、旋转、翻转)、基于3x3矩阵的透视变换。

    图像平移

    opencv实现图像平移

    实现图像平移,我们需要定义下面这样一个矩阵,tx和ty分别是x和y方向上平移的距离:
    用于图像平移的矩阵
    图像平移利用仿射变换函数 cv.warpAffine() 实现

    实验

    # 图像平移
    import numpy as np
    import cv2 as cv
    
    img = cv.imread('paojie.jpg')
    
    rows, cols = img.shape[:2]
    
    # 定义平移矩阵,需要是numpy的float32类型
    # x轴平移100,y轴平移50
    M = np.float32([[1, 0, 100], [0, 1, 50]])
    # 用仿射变换实现平移,第三个参数为dst的大小
    dst = cv.warpAffine(img, M, (cols, rows))
    
    cv.imshow('shift', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    实验结果

    图像平移结果

    图像缩放

    opencv中的图像缩放

    缩放就是调整图片的大小,使用cv.resize()函数实现图像缩放。可以按照比例缩放,也可以按照指定的大小缩放。

    实验

    # 图像缩放
    import numpy as np
    import cv2 as cv
    
    img = cv.imread('paojie.jpg')
    
    # 按照指定的宽度、高度缩放图片
    res = cv.resize(img, (132, 150))
    # 按照比例缩放,如x,y方向均放大一倍
    # res2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
    
    cv.imshow('shrink', res)
    # cv.imshow('zoom', res2)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    实验结果

    图像缩小结果

    各种interpolation方式

    参考:各种插值方法介绍

    图像旋转

    简介

    旋转同平移一样,也是用仿射变换实现的,因此也需要定义一个变换矩阵。OpenCV直接提供了 cv.getRotationMatrix2D()函数来生成这个矩阵,该函数有三个参数:
    参数1:图片的旋转中心
    参数2:旋转角度(正:逆时针,负:顺时针)
    参数3:缩放比例,0.5表示缩小一半

    实验

    # 图像旋转
    import numpy as np
    import cv2 as cv
    
    img = cv.imread('paojie.jpg')
    rows,cols = img.shape[:2]
    
    # 逆时针45°旋转图片并缩小一半,第一个参数为旋转中心
    M = cv.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.5)
    # img:源图像;M:旋转仿射矩阵;(cols,rows):dst的大小
    dst = cv.warpAffine(img, M, (cols, rows))
    
    cv.imshow('rotation', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    实验结果

    图像旋转缩小结果

    图像翻转

    opencv中的图像翻转

    dst = cv2.flip(img, 1)
    其中,函数中的第二个参数大于0,表示图像水平翻转(沿y轴);第二个参数等于0,表示图像垂直翻转(沿x轴);第二个参数小于0,表示图像既水平翻转,又垂直翻转。

    实验

    # 图像翻转
    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as plt
    
    img = cv.imread('paojie.jpg')
    
    # 水平翻转
    hor = cv.flip(img,1)
    # 垂直翻转
    ver = cv.flip(img,0)
    # 水平垂直翻转
    hor_ver = cv.flip(img,-1)
    
    plt.figure(1)
    plt.subplot(2,2,1)
    plt.imshow(img)
    plt.title('Original')
    plt.xticks([]),plt.yticks([])
    
    plt.subplot(2,2,2)
    plt.imshow(hor)
    plt.title('horizontal')
    plt.xticks([]),plt.yticks([])
    
    plt.subplot(2,2,3)
    plt.imshow(ver)
    plt.title('vertical')
    plt.xticks([]),plt.yticks([])
    
    plt.subplot(2,2,4)
    plt.imshow(hor_ver)
    plt.title('horizontal_and_vertical')
    plt.xticks([]),plt.yticks([])
    
    plt.show()
    

    实验结果

    图像各种翻转结果
    看完了整篇文章,不点个赞放松一下。

  • 相关阅读:
    [IOS] iphone开发之UITableView之UITableViewCell [待续中。。。]
    人生需有三心境,你有吗?
    iPad iPhone程序增加启动画面
    [转载]IOS学习之UIApplication深入学习
    [IOS] iphone开发之[美化按钮]
    程序中调用Safari
    ios编程:iPhone Howto:给UIView拍照
    IOSAPNS 消息推送实践
    ios 设备方向判断
    [IOS]iphone开发之横屏与竖屏在不同视图之间的切换
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12590295.html
Copyright © 2020-2023  润新知