opencv002图像处理(旋转01)

不得不说,学习这个的问题远远比我想象的要多,一个参数没弄对就报错了,尊都很无奈!(但是后来发现错误的原因都很好笑)而且里面好多好多矩阵什么公式太吓人了,可是这才刚刚开始啊啊啊啊

opencv002图像处理(旋转01)_第1张图片

1.旋转原理

 从黑马程序员里截下来的

opencv002图像处理(旋转01)_第2张图片

总之就是图没变,但是坐标变了

然后——变形,用x和y表示sina和cosa

opencv002图像处理(旋转01)_第3张图片

opencv002图像处理(旋转01)_第4张图片

高代刚学一半还没考试,这块有点懵

2.用到的的函数

 cv.getRotationMatrix2D(    center, angle, scale    )

OpenCV 提供了 cv.getRotationMatrix2D 函数, 根据旋转角度和位移计算旋转变换矩阵

参数 说明
center 表示旋转中心坐标,二元元组 (x0, y0)。
angle 表示旋转角度,单位为角度,逆时针为正数,顺时针为负数
scale 表示缩放因子。

例:(数是随便写的)

m1 = cv.getRotationMatrix2D((145, 420), 20, 1)

 cv.warpAffine()

cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
  • 参数    说明
  • src    表示输入图像。
  • M    表示变换矩阵(刚刚用上面的函数得到),2行3列。
  • dsize    表示输出图像的大小,二元元组 (width, height)。(用下面的shape函数)
  • (这几个可选项我都没用)
  • dst    表示变换操作的输出图像,可选项。
  • flags    表示插值方法,整型(int),可选项。
  • borderMode    表示边界像素方法,整型(int),可选项,默认值为 cv.BORDER_REFLECT。
  • borderValue    表示边界填充值,可选项,默认值为 0(黑色填充)。
     
imgRotation = cv.warpAffine(img1, m1, (img1.shape[0], img1.shape[1]))

当时忘了写m1了,找半天错 

opencv002图像处理(旋转01)_第5张图片

Numpy中的shape函数

shape函数的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度,相当于行数 shape[1]代表列数。它的输入参数可以是一个整数表示维度,也可以是一个矩阵。shape函数返回的是一个元组,表示数组(矩阵)的维度。

3.成功旋转

import numpy as np
import cv2 as cv
img1 = cv.imread("F:\est01\mh.jpg", 1)
m1 = cv.getRotationMatrix2D((145, 420), 20, 1)
imgRotation = cv.warpAffine(img1, m1, (img1.shape[0], img1.shape[1]))
cv.imshow('imgRotation', imgRotation)
cv.namedWindow('imgRotation', 1)
cv.resizeWindow('imgRotation', img1.shape[0], img1.shape[1])
cv.imshow('original', img1)
cv.waitKey(0)

opencv002图像处理(旋转01)_第6张图片

但是这个显示的旋转后的图像不完整,明天学习另一种完整的! 

你可能感兴趣的:(opencv,图像处理,人工智能)