python代码实现,需要输入原图片和旋转角度。
def rotate(img, angle):#输入原图片和需要旋转的角度
# 旋转图片
(h, w) = img.shape[:2] # 获得图片高,宽
center = (w // 2, h // 2) # 获得图片中心点
#求旋转矩阵
img_ratete = cv2.getRotationMatrix2D(center, angle, 1)
#求旋转图片
rotated = cv2.warpAffine(img, img_ratete, (w, h))
return rotated
主要用到了opencv自带的两个函数:
1、主要用于获得图像绕着某一点的旋转矩阵 。
c++ : Mat cv::getRotationMatrix2D(Point2f center, double angle, double scale)
python: cv2.getRotationMatrix2D(center,angle,scale)
参数详解:
Point2f center:表示旋转的中心点
double angle:表示旋转的角度
double scale:图像缩放因子
2、仿射变换,warpAffine可以实现一些简单的重映射。
cpp
c++:void cv::warpAffine(InputArray src,
OutputArray dst,
InputArray M,
Size dsize,
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar &borderValue = Scalar()
)
python:cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))
src: 输入图像
dst: 输出图像,尺寸由dsize指定,图像类型与原图像一致
M: 变换矩阵
dsize: 指定图像输出尺寸
flags: 插值算法标识符,有默认值INTER_LINEAR,如果插值算法为WARP_INVERSE_MAP, warpAffine函数使用如下矩阵进行图像转换
borderMode: 边界像素模式
borderValue:边界填充值