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

您所在的位置:网站首页 旋转180度是什么样 Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

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

2023-10-26 10:16| 来源: 网络整理| 查看: 265

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

1 cv2.getRotationMatrix2D(center, angle, scale)

图像的旋转矩阵一般为:

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

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

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

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

parameters

center:旋转中心坐标,是一个元组参数(col, row)

angle:旋转角度,旋转方向,负号为逆时针,正号为顺时针

scale:旋转后图像相比原来的缩放比例,1为等比例缩放

returns

获得一个旋转矩阵

栗子:

import cv2 import numpy as np img = 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]] '''

参考:

https://blog.csdn.net/weixin_36670529/article/details/89846039 2 cv2.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 参数含义src输入图像,可以为单通道或彩色图像M变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3变换矩阵。dsize输出图像的大小dst仿射变换后的输出图像flags插值方法的组合(int 类型),默认为 flags=cv2.INTER_LINEAR,表示线性插值borderMode边界像素模式(int 类型)borderValue边界填充值; 默认情况下,它为0,也就是边界填充默认是黑色。

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

flags取值含义cv2.INTER_LINEAR线性插值(默认)cv2.INTER_NEAREST最近邻插值cv2.INTER_AREA区域插值cv2.INTER_CUBIC三次样条插值cv2.INTER_LANCZOS4Lanczos插值

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

参考:

https://blog.csdn.net/qq_39507748/article/details/104449245 3 图像旋转的通用写法 import cv2 import 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 cv2 import random import matplotlib.pylab as plt # 定义旋转函数 def ImageRotate(image): height, width = image.shape[:2] # 输入(H,W,C),取 H,W 的zhi center = (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_rotation image = cv2.imread('../DAVIS-2016/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:

顺时针

逆时针

 

 

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3