美文网首页Opencv-Python用python进行OpenCV实战
5 用python进行OpenCV实战之图像变换2(旋转)

5 用python进行OpenCV实战之图像变换2(旋转)

作者: 楼上小宇 | 来源:发表于2017-08-29 22:44 被阅读32次

    前言

    最近有些其他事情,一周未更新了,实在抱歉。以后争取,每周多更新几次。虽然也不知道能有多少人看到,但是也算自己的一种坚持吧!

    1 旋转

    1.1 旋转基本操作

    旋转的概念正如我们平常听见的一样:将图片选装x度。我们先通过多少度来旋转图片,然后我们将写一个旋转函数。

    import numpy as np #1
    import argparse #2
    import imutils #3
    import cv2 #4
    
    ap = argparse.ArgumentParser() #5
    ap.add_argument("-i", "--image", required = True,
        help = "Path to the image") #6
    args = vars(ap.parse_args()) #7
    
    image = cv2.imread(args["image"]) #8
    cv2.imshow("Original", image) #9
    
    (h, w) = image.shape[:2] #10
    center = (w // 2, h // 2) #11
    
    M = cv2.getRotationMatrix2D(center, 45, 1.0) #12
    rotated = cv2.warpAffine(image, M, (w, h)) #13
    cv2.imshow("Rotated by 45 Degrees", rotated) #14
    
    M = cv2.getRotationMatrix2D(center, -90, 1.0) #15
    rotated = cv2.warpAffine(image, M, (w, h)) #16
    cv2.imshow("Rotated by -90 Degrees", rotated) #17
    
    rotated = imutils.rotate(image, 180) #18
    cv2.imshow("Rotated by 180 Degrees", rotated) #19
    cv2.waitKey(0) #20
    

    #1-9:
    与前几节一样的操作,进行导包,然后显示原始图片,但是需要注意的是在第三行 import imutils,还记得它是什么吗?我们在上一节还详细介绍过啊。忘记了,可以返回上一节看看。

    #10-11:
    在第10行中我们得到了图像的宽和高,然后我们通过"//"将它们除以2取整来得到旋转的中心。当然我们也可以不以中心为旋转中心,这里为了方便。

    #12:
    正如我们定义一个矩阵来移动图像一样,我们还需要定义一个矩阵来旋转图像,然而不同的是我们不是通过NumPy来构造矩阵的,而是通过:

    cv2.getRotationMatrix2D()
    

    第一个参数:表示向以哪一点进行旋转?这里就是图像的中心
    第二个参数:表示我们希望旋转的角度。这里为正45度,表示顺时针旋转45度
    第三个参数:表示图像旋转后的大小,这里设为1表示大小与原图大小一致

    #13-14:
    通过cv2.warpAffine()方法,我们便可进行旋转图像的操作,第一个参数为原图,第二个参数为旋转矩阵,第三个参数为图像(宽,高)的元组,然后将旋转后的图像显示出来

    #15-17:
    采用同样的方法将图像逆时针旋转90度,然后展示出来

    #18-20:
    在第18行我们使用了:imutils这个自己写的库,然后调用了rotate()方法。第一个参数是需要操作的图像,第二个参数是要旋转的度数。

    1.2 自写的函数库

    在imutils.py中我们自定义rotate函数

    def rotate(image, angle, center=None, scale=1.0): #1
        (h, w) = image.shape[:2] #2
        if center is None: #3
            center = (w // 2, h // 2) #4
    
        M = cv2.getRotationMatrix2D(center, angle, scale) #5
    
        rotated = cv2.warpAffine(image, M, (w, h)) #6
        return rotated #7
    

    #1-4:
    我们的旋转方法又四个参数,第一个是图像,第二个是我们所希望旋转的角度,我们还提供了两个可选择的变量:中心点和规模。中心点是我们希望我们的图像围绕哪一点旋转?如果,没有给它赋值,我们会默认将图像的中心点赋值给它。规模大小我们默认为1.0,表示没有任何大小的变化。

    #5-7:
    通过构造我们的旋转矩阵,然后我们将旋转后的结果返回。

    2 效果展示

    旋转效果展示

    转载请注明出处:
    CSDN:楼上小宇__home:http://blog.csdn.net/sty945
    简书:楼上小宇:http://www.jianshu.com/u/1621b29625df

    相关文章

      网友评论

        本文标题:5 用python进行OpenCV实战之图像变换2(旋转)

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