Opencv-python之图像移动和旋转

函数:cv2.warpAffine()、cv2.getRotationMatrix2D()

说明:此函数可以对图片进行平移和旋转操作。此函数需要和python 自带的numpy库结合使用。

简单例子:

代码如下:

<code>import cv2

import numpy as np

#打开图片

img = cv2.imread('1.png',0)

cv2.imshow('a0',img)

#获取图片的长和宽

rows,cols = img.shape

#平移

#创建一个矩阵,其中100和50分别是向左平移100像素,向下平移50像素

M = np.float32([[1,0,100],[0,1,50]])

a1= cv2.warpAffine(img,M,(cols,rows))

cv2.imshow('a1',a1)

#旋转

M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)

a2 = cv2.warpAffine(img,M,(cols,rows))

cv2.imshow('a2',a2)

 #关闭窗口

cv2.waitKey(0)

cv2.destroyAllWindows()/<code>

原图:

Opencv-python之图像移动和旋转

1.png

运行代码后:


Opencv-python之图像移动和旋转

1.打开后的原图 2平移后的图 3旋转后的图


详解:

rows,cols = img.shape

此函数是获取图片的宽(rows)和长(cols),它只能读取灰度图片的参数,所以要用img = cv2.imread('1.png',0),后面这个0代表灰度,如果改成1或者删掉,则代表彩色

M = np.float32([[1,0,100],[0,1,50]])

这个函数输出结果如下

其中100(向左)和50(向下)代表你要移动的参数

cv2.warpAffine(img,M,(cols,rows))

img是自己导入图片,M 是根据矩阵参数进行图片变化,(cols,rows)这个是代表图片(新窗口大小)

cols,和rows都等于200,如果将改成400,如cv2.warpAffine(img,M,(400,400)),则新窗口大小如下:


难点:

为什么矩阵M前面要有0和1?

其实前面部分是,


Opencv-python之图像移动和旋转


[1,0;0,1]代入函数正好算出来θ=0,即不旋转,如果要旋转一定角度,则要算出这个矩阵大小来,这是比较麻烦的,所以要用M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)进行换算。


M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)

(cols/2,rows/2)这是坐标是图片中心,即旋转中心,可以换成以某个坐标旋转。

90,表示逆时针旋转90°

通过这个函数,可以直接生成旋转90°的矩阵M,然后把M代入cv2.warpAffine(img,M,(cols,rows))即可得到旋转后的图片。




分享到:


相關文章: