zoukankan      html  css  js  c++  java
  • 几何变换

    1、变换

    OpenCV 提供了两个变换函数,cv2.warpAffine 和 cv2.warpPerspective,
    使用这两个函数你可以实现所有类型的变换。cv2.warpAffine 接收的参数是
    2 × 3 的变换矩阵,而 cv2.warpPerspective 接收的参数是 3 × 3 的变换矩
    阵。
    2、扩展缩放(只是改变图像的尺寸大小)
    OpenCV 提供的函数 cv2.resize()
    可以实现这个功能。图像的尺寸可以自己手动设置,你也可以指定缩放因子。我
    们可以选择使用不同的插值方法。
    在缩放时我们推荐使用 cv2.INTER_AREA,在扩展时我们推荐使用 v2.INTER_CUBIC(慢) 和 v2.INTER_LINEAR。
    默认情况下所有改变图像尺寸大小的操作使用的插值方法都是 cv2.INTER_LINEAR。
    你可以使用下面任意一种方法改变图像的尺寸
    import cv2
    import numpy as np
    img=cv2.imread('messi5.jpg') # 下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子
    # 因此这里为 None
    res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
    #OR
    # 这里呢,我们直接设置输出图像的尺寸,所以不用设置缩放因子
    height,width=img.shape[:2]
    res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
    while(1):
    cv2.imshow('res',res)
    cv2.imshow('img',img)
    if cv2.waitKey(1) & 0xFF == 27:
    break
    cv2.destroyAllWindows()

    2、平移

    平移就是将对象换一个位置。如果你要沿(x,y)方向移动,移动的距离
    是(tx,ty),你可以以下面的方式构建移动矩阵:
     
    你可以使用 Numpy 数组构建这个矩阵(数据类型是 np.flfloat32),然
    后把它传给函数 cv2.warpAffiffiffine()。看看下面这个例子吧,它被移动了
    (100,50)个像素。
    import cv2
    import numpy as np
    cap=cv2.VideoCapture(0)
    while(1):
    # 获取每一帧
    ret,frame=cap.read()
    # 转换到 HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    # 设定蓝色的阈值
    lower_blue=np.array([110,50,50])
    upper_blue=np.array([130,255,255])
    # 根据阈值构建掩模
    mask=cv2.inRange(hsv,lower_blue,upper_blue)
    # 对原图像和掩模进行位运算
    res=cv2.bitwise_and(frame,frame,mask=mask)
    # 显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k=cv2.waitKey(5)&0xFF
    if k==27:
    break
    # 关闭窗口
    cv2.destroyAllWindows()
    警告:函数 cv2.warpAffiffiffine() 的第三个参数的是输出图像的大小,它的格式
    应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行
    数。
    4、旋转
     
    import cv2
    import numpy as np
    img=cv2.imread('messi5.jpg',0)
    rows,cols=img.shape
    # 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
    # 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
    M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6) # 第三个参数是输出图像的尺寸中心
    dst=cv2.warpAffine(img,M,(2*cols,2*rows))
    while(1):
    cv2.imshow('img',dst)
    if cv2.waitKey(1)&0xFF==27:
    break
    cv2.destroyAllWindows()

    5、仿射变换

    6、透视变换

     
     
     
  • 相关阅读:
    SE知识整理——泛型
    IDEA 运行 SpringMVC 项目分发控制器出现404解决方案。
    快速幂/欧拉降幂
    Leetcode(双指针专题)
    剑指offer
    ns3参考
    网络知识1:最后一公里/WiMax / 4G
    备份2
    shell入门
    ns3_gdb:协议里的函数是怎么被调用的
  • 原文地址:https://www.cnblogs.com/h694879357/p/12272454.html
Copyright © 2011-2022 走看看