当前位置:   article > 正文

OpenCV实现图像平移、旋转_opencv 图像旋转

opencv 图像旋转

        旋转平移都要用到cv2.warpAffine(src,M,dsize,flags,mode,value),区别就是构造变换矩阵M的方式不同。平移比较简单可以手动构造。

        旋转我们用到cv2.getROtationMatrix2D(center,angle,scale)构造变换矩阵M.

1.图像平移

        图像是由像素组成的,我们用(x,y)来表示一副图像中像素点所处的位置。假如一个像素点从x0,y0移动到x,y我们可以这样表示:

        \begin{bmatrix} x \\ y \end{bmatrix}=\begin{bmatrix} 1 \quad 0 \\ 0 \quad 1 \end{bmatrix}\begin{bmatrix} x_{0} \\ y _{0} \end{bmatrix}+\begin{bmatrix} \Delta x \\ \Delta y \end{bmatrix}

        但我们目标的是构造一个变化矩阵T来对原图P0进行变化,即如下:

P=T.P_{0}

        因此我们可以构造2*3的变换矩阵如下式:

P=T\cdot P_{0}=\begin{bmatrix} 1 \quad 0 \quad \Delta x \\ 0 \quad 1 \quad \Delta y \end{bmatrix}\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}=\begin{bmatrix} x_{0} +\Delta x \\ y_{0}+\Delta y \end{bmatrix}=\begin{bmatrix} x \\ y \end{bmatrix}

        使用函数cv2.warpAffine(src,M,dsize,flags,mode,value)来进行矩阵变换操作,其中src即我们平移的图像,M为变换矩阵,dsize为输出图像尺寸,flag与resize中的插值算法一致  ,mode边界外推法标志 ,value:填充边界的值。 我们一般只用到前三个参数。

        以向右和向下各平移50个像素为例:

  1. import cv2
  2. import numpy as np
  3. img=cv2.imread(r"C:\Users\86166\Desktop\wallhaven.png")
  4. #图片有点大 先对其 缩放 方便展示
  5. img=cv2.resize(img,None,fx=0.3,fy=0.3)
  6. h,w,ch=img.shape
  7. #平移矩阵
  8. M=np.float32([[1,0,50],
  9. [0,1,50]])
  10. new=cv2.warpAffine(img,M,(w,h))
  11. cv2.imshow('img',img)
  12. cv2.imshow('new',new)
  13. cv2.waitKey(0)

现象如下,可见图像向 右和向下分别移动了50个像素点。

2.图像旋转

        图像旋转同样需要变换矩阵M,我们可以使用cv2.getROtationMatrix2D(center,angle,scale)函数来得到变换矩阵M.- center:旋转中心点  angle:旋转角度   scale :缩放因子

        这里不对图像旋转的矩阵M进行过多赘述,其原理同 矩阵旋转一样,大家可以查阅线性代数矩阵变换相关知识。

        我们以绕图像中心点旋转45度为例,并且  缩放0.5倍:

  1. import cv2
  2. import numpy as np
  3. img=cv2.imread(r"C:\Users\86166\Desktop\wallhaven.png")
  4. #图片有点大 先对其 缩放 方便展示
  5. img=cv2.resize(img,None,fx=0.3,fy=0.3)
  6. h,w,ch=img.shape
  7. #旋转矩阵
  8. M=cv2.getRotationMatrix2D((w/2,h/2),45,0.5) #旋转默认为逆时针
  9. new=cv2.warpAffine(img,M,(w,h))
  10. cv2.imshow('img',img)
  11. cv2.imshow('new',new)
  12. cv2.waitKey(0)

现象如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/983092
推荐阅读
相关标签
  

闽ICP备14008679号