美文网首页
Opencv第六课--图像的运算

Opencv第六课--图像的运算

作者: 计算机视觉__掉队选手 | 来源:发表于2019-04-02 17:15 被阅读0次

    数字图像的运算

    图像处理中最重要的内容之一就是图像的运算,图像像素的运算包括点运算、代数运算、逻辑运算,图像的几何变换方法包括平移、镜像、缩放、转置、旋转和剪切,图像的邻域操作和区域选择。

    获取和修改

    import cv2
    import numpy as np
    img = cv2.imread("test.jpg")
    #可以通过像素点读取
    px = img[100,100]
    #返回的是一个RGB的三维向量
    

    上面的例子是对一副输入图像的像素值进行读取,下面通过接口快速实现对像素值的修改

    import cv2
    import numpy as np
    img = cv2.imread("test.jpg")
    print(img.item(10,10,2))
    img.itemset((10,10,2),100)
    print(img.item(10,10,2))
    

    当然经常需要访问图像的一些属性,包括行、列,大小,类型

    import cv2
    img = cv2.imread("test.jpg")
    print(img.shape)
    ##(280,450,3)
    print(img.size)
    ##12600
    print(img.dtype)
    ##uint8
    

    图像加法

    cv2.add()是将两幅图像进行加法运算

    图像混合

    image.png

    cv2.addWeighted()就是按照这个公式进行混合操作的,实现不同比例的一种图像混合。

    import cv2
    import numpy as np
    img1 = cv2.imread("test1.jpg")
    img2 = cv2.imread("test2.jpg")
    dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
    cv2.imshow("dst",dst)
    cv2.waitKey(0)
    cv2.destroyAllWindow()
    

    几何变换

    扩展缩放

    cv2.resize()可以实现这个功能

    import numpy as np
    import cv2
    img = cv2.imread("test.jpg")
    res = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
    cv2.imshow("res",res)
    cv2.imshow("img",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    平移

    import cv2
    import numpy as np
    img = cv2.imread("test.jpg")
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    mode = imgInfo[2]
    dst  = np.zeros(imgInfo,np.uint8)
    for i in range(height):
      for j in range(width-100):
          dst[i,j+100] = img[i,j]
    cv2.imshow("dst",dst)
    cv2.imshow("img",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png

    原始图像向右移动100个像素

    旋转

    def rotation():
        img = cv2.imread("test.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("dst",dst)
            cv2.imshow("img",img)
            if cv2.waitKey(1)&0xFF==27:
                break
        cv2.destroyAllWindows()
    if __name__ == "__main__":
        rotation()
    

    仿射变换

    def warpAffine():
        img = cv2.imread("test.jpg")
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        #原图的三个坐标
        matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])
        #仿射图的三个坐标
        matDst = np.float32([[50,50],[100,height-50],[width-200,100]])
        matAffine = cv2.getAffineTransform(matSrc,matDst)
        dst = cv2.warpAffine(img,matAffine,(height,width))
        cv2.imshow("dst",dst)
        while(1):
            if cv2.waitKey(1)&0xFF==27:
                break
        cv2.destroyAllWindows()
        
    if __name__ == "__main__":
        warpAffine()
    

    相关文章

      网友评论

          本文标题:Opencv第六课--图像的运算

          本文链接:https://www.haomeiwen.com/subject/pvugbqtx.html