• Opencv实现图像的基本变换


    1.图像缩放

    函数
    resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None):
    src:输入的图片 ;
    dsize:缩放的目标尺寸大小;
    dst:输入图片;
    fx:x轴的缩放因子;
    fy:y轴的缩放因子;
    interpolation:插值算法;

    插值算法:
    (1)INTER_NEAREST:邻近插值算法,速度快,效果差;
    (2)INTER_LINEAR:双线性插值(使用周围的四个像素作为参考);
    (3)INTER_CURBIC:三次插值(使用周围的十六个像素作为参考);
    (4)INTER_AREA:效果最好;

    1.图像缩放
    函数
    resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None):
    src:输入的图片 ;
    dsize:缩放的目标尺寸大小; 
    dst:输入图片;
    fx:x轴的缩放因子;  
    fy:y轴的缩放因子;
    interpolation:插值算法;
    
    插值算法:
    (1)INTER_NEAREST:邻近插值算法,速度快,效果差;
    (2)INTER_LINEAR:双线性插值(使用周围的四个像素作为参考);
    (3)INTER_CURBIC:三次插值(使用周围的十六个像素作为参考);
    (4)INTER_AREA:效果最好;
    def Resize():
        img=cv2.imread('images/lenna.png')
        #resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None):
        #src:输入的图片 dsize:缩放的目标尺寸大小 dst:输入图片 fx:x轴的缩放因子  fy:y轴的缩放因子  interpolation:插值算法
        dst=cv2.resize(src=img,dsize=(500,500))
        cv2.imshow('img',img)
        cv2.imshow('dst',dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述


    2.图像翻转

    flip(src, flipCode, dst=None):
    Src:输入的原始图像;
    flipCode:翻转的方式;
    Dst:输出图像;

    flipCode==0表示上下翻转;
    flipCode>0表示左右翻转;
    flipCode<0表示上下+左右翻转;

    def Rotate():
        img=cv2.imread('images/lenna.png')
        dst=cv2.flip(src=img,flipCode=0)
        cv2.imshow('img',img)
        cv2.imshow('dst',dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述


    3.图像的旋转

    rotate(src, rotateCode, dst=None):
    Src:输入的原始图像;
    rotateCode:旋转的方式;
    Dst:输出图像;
    旋转方式:
    ROTATE_90_CLOCKWISE:顺时针旋转90度;
    ROTATE_180:旋转180度;
    ROTATE_90_COUNTERCLOCKWISE:逆时针旋转90度;

    def Rotate():
        img = cv2.imread('images/lenna.png')
        dst = cv2.rotate(src=img,rotateCode=cv2.ROTATE_90_CLOCKWISE)
        cv2.imshow('img', img)
        cv2.imshow('dst', dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述


    4.仿射变换获取矩阵

    (1)仿射变换:图像的旋转,缩放,平移的总称;
    warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None):
    Src:输入的原始图像;
    M:变换矩阵;
    Dsize:输出的图像大小;
    Flags:与resize中的插值算法一致;
    borderMode:边界外推法标志;
    borderValue:填充边界的值;
    Dst:输出图像;

    矩阵的平移:
    (1)矩阵中的每个像素值都是由(x,y)组成;
    (2)其变换矩阵为2x2的矩阵(单位阵);
    (3)平移向量为2x1的向量;,所以平移矩阵为2x3的矩阵;

    def WrapAffine():
        img = cv2.imread('images/lenna.png')
        #进行横向的平移,不进行竖向的平移
        M=np.float32([[1,0,100],[0,1,0]])
        dst = cv2.warpAffine(src=img,M=M,dsize=(450,450),flags=cv2.INTER_LINEAR)
        cv2.imshow('img', img)
        cv2.imshow('dst', dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    进行横向的平移,不进行竖向的平移
    在这里插入图片描述

    获取变换矩阵
    getRotationMatrix2D(center, angle, scale):
    Center:旋转中心点;
    Angle:旋转角度(逆时针旋转);
    Scale:缩放比例;

    def GetRotationMatrix2D():
        img = cv2.imread('images/lenna.png')
        # 进行横向的平移,不进行竖向的平移
        M=cv2.getRotationMatrix2D(center=(300,300),angle=45,scale=1.0)
        dst = cv2.warpAffine(src=img, M=M, dsize=(450, 450), flags=cv2.INTER_LINEAR)
        cv2.imshow('img', img)
        cv2.imshow('dst', dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    获得变换矩阵
    getAffineTransform(src, dst)
    Src:三个点确定输入变换的位置;
    Dst:三个点确定输出变换的位置;

    def GetAffineTransform():
        img = cv2.imread('images/lenna.png')
        #输入图像的三个坐标点
        src=np.float32([[100,100],[100,300],[100,300]])
        #输出图像的三个坐标点
        dst=np.float32([[200,200],[300,350],[350,450]])
        M=cv2.getAffineTransform(src=src,dst=dst)
        dst = cv2.warpAffine(src=img, M=M, dsize=(450, 450), flags=cv2.INTER_LINEAR)
        cv2.imshow('img', img)
        cv2.imshow('dst', dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

  • 相关阅读:
    【实用技巧】Unity中的Image组件
    配置阿里云镜像加速器 -docker
    WEB与低代码:B/S架构在开发中的应用与优势
    PerfView专题 (第十五篇): 如何洞察 C# 中的慢速方法
    AI秘籍:助您提升办公和学习效率
    Python程序龟速过载怎么办,asyncio并发教程来解决
    imx6ull应用程序进systemd里踩坑
    什么是多态,instanceof,类型转换
    java项目-第132期ssm学生会管理系统-ssm+shiro+activity社团毕业设计
    动手做一个小机器人——语音控制篇
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/125428402