700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Opencv:图像旋转 cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

Opencv:图像旋转 cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

时间:2023-05-03 05:01:34

相关推荐

Opencv:图像旋转 cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

学习记录如何使用opencv实现对图像的旋转操作。

1cv2.getRotationMatrix2D(center, angle, scale)

图像的旋转矩阵一般为:

但是单纯的这个矩阵是在原点处进行变换的,为了能够在任意位置进行旋转变换,opencv采用了另一种方式:

为了构造这个矩阵,opencv提供了一个函数:

M = cv2.getRotationMatrix2D(center, angle, scale)

此函数主要用于获得图像绕着某一点的旋转矩阵,这个函数需要三个参数,旋转中心,旋转角度,旋转后图像的缩放比例。返回一个2*3矩阵,主要用于cv2.warpAffine()仿射变换。

栗子:

import cv2import numpy as npimg = cv2.imread('aier.jpg') # 读入图像,(H, W, C)rows,cols = img.shape[:2]# 取前两个值(H,W)# 第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例, 生成一2*3的矩阵center = (cols/2, rows/2) # 以图像中心为旋转中心angle = 90 # 顺时针旋转90°scale = 1 # 等比例旋转,即旋转后尺度不变 M = cv2.getRotationMatrix2D(center, angle, scale)print(M)'''[[ 6.123234e-17 1.000000e+00 1.500000e+02][-1.000000e+00 6.123234e-17 6.500000e+02]]'''

参考:

/weixin_36670529/article/details/89846039

2cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)

cv2.warpAffine()函数主要是利用变换矩阵M对图像进行如旋转、仿射、平移等变换,只需要我们提供一个2*3的变换矩阵M,就可以对图像进行变换。它一般是和cv2.getRotationMatrix2D和cv.GetAffineTransform两个函数在一起使用,这两个函数是用来获取变换矩阵M,这样就不需要我们自己设置M。

cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue) → dst

一般使用前三个参数,其中flags表示插值方式,有以下取值:

对于插值方式的具体实践,将在另一篇文章中介绍。

参考:

/qq_39507748/article/details/104449245

3 图像旋转的通用写法

import cv2import random# 定义旋转函数def ImageRotate(image):height, width = image.shape[:2] # 输入(H,W,C),取 H,W 的值center = (width / 2, height / 2) # 绕图片中心进行旋转angle = random.randint(-180, 180) # 旋转方向取(-180,180)中的随机整数值,负为逆时针,正为顺势针scale = 0.8 # 将图像缩放为80%# 获得旋转矩阵M = cv2.getRotationMatrix2D(center, angle, scale)# 进行仿射变换,边界填充为255,即白色,默认为0,即黑色image_rotation = cv2.warpAffine(src=image, M=M, dsize=(height, width), borderValue=(255, 255, 255))return image_rotation

4 实例

# opencv实现图像旋转实例import cv2import randomimport matplotlib.pylab as plt# 定义旋转函数def ImageRotate(image):height, width = image.shape[:2] # 输入(H,W,C),取 H,W 的zhicenter = (width / 2, height / 2) # 绕图片中心进行旋转angle = random.randint(-180, 180) # 旋转方向取(-180,180)中的随机整数值,负为逆时针,正为顺势针scale = 0.8 # 将图像缩放为80%# 获得旋转矩阵M = cv2.getRotationMatrix2D(center, angle, scale)# 进行仿射变换,边界填充为255,即白色,默认为黑色image_rotation = cv2.warpAffine(src=image, M=M, dsize=(height, width), borderValue=(255, 255, 255))return image_rotationimage = cv2.imread('../DAVIS-/JPEGImages/1080p/blackswan/00004.jpg')image = cv2.resize(image, (224, 224))image_rotation = ImageRotate(image)plt.subplot(1, 2, 1)plt.imshow(image)plt.subplot(1, 2, 2)plt.imshow(image_rotation)plt.show()

result:

顺时针逆时针

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。