【tensorflow】MTCNN网络基本函数rotate

1、函数介绍:

cv2.getRotationMatrix2D()

这个函数需要三个参数,旋转中心,旋转角度,旋转后图像的缩放比例

原点旋转:
在这里插入图片描述
任意位置旋转:
在这里插入图片描述

2、cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
其中:
src - 输入图像。
M - 变换矩阵。
dsize - 输出图像的大小。
flags - 插值方法的组合(int 类型!)
borderMode - 边界像素模式(int 类型!)
borderValue - (重点!)边界填充值; 默认情况下,它为0。
flages表示插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA(区域插值) cv2.INTER_CUBIC(三次样条插值)cv2.INTER_LANCZOS4(Lanczos插值)

实例:

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('IOU.jpg')
rows,cols = img.shape[:2]
#第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
#第三个参数:变换后的图像大小
res = cv2.warpAffine(img,M,(rows,cols))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)

在这里插入图片描述
更多旋转相关请参考:OpenCV-Python:图像的几何变换(平移、旋转、仿射变换等)( http://blog.topspeedsnail.com/archives/2124
3、函数rotate:

import tensorflow as tf
import numpy as np
import cv2
def rotate(img, bbox, landmark, alpha):
    """
        given a face with bbox and landmark, rotate with alpha
        and return rotated face with bbox, landmark (absolute position)
    """
    #对于给定的bbox和landmark,旋转alpha角度,同时返回旋转后的图片和landmark的绝对坐标
    center = ((bbox[0]+bbox[2])/2, (bbox[1]+bbox[3])/2) #中心坐标
    rot_mat = cv2.getRotationMatrix2D(center, alpha, 1)           #逆时针旋转,缩放因子是1
    print("rot_mat:%s"%rot_mat)
    #whole image rotate
    #pay attention: 3rd param(col*row)
    img_rotated_by_alpha = cv2.warpAffine(img, rot_mat,(img.shape[1],img.shape[0]))

    landmark_ = np.asarray([(rot_mat[0][0]*x+rot_mat[0][1]*y+rot_mat[0][2],
                 rot_mat[1][0]*x+rot_mat[1][1]*y+rot_mat[1][2]) for (x, y) in landmark])
    #crop face
    face = img_rotated_by_alpha[bbox[1]:bbox[3]+1,bbox[0]:bbox[2]+1]
    cv2.imshow("img_rotated_by_alpha", img_rotated_by_alpha)
    print("landmark_:%s" % landmark_)
    return (face, landmark_)

img = cv2.imread("IOU.jpg",1)
bbox = np.array([5,5,75,75])   # x1(横坐标),y1(纵坐标),x2,y2
landmark = np.array([[10,10],[50,10],[35,20],[10,50],[50,50]])
img = cv2.resize(img,(300,250))
cv2.circle(img,(10,10),2,(0,0,255),-1)
cv2.circle(img,(50,10),2,(0,0,255),-1)
cv2.circle(img,(35,20),2,(0,0,255),-1)
cv2.circle(img,(10,50),2,(0,0,255),-1)
cv2.circle(img,(50,50),2,(0,0,255),-1)
cv2.rectangle(img,(bbox[0],bbox[1]),(bbox[2],bbox[3]),(0,255,0), 2)
rotate(img, bbox, landmark, 5)
cv2.imshow("img",img)
cv2.waitKey()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
作用:用来做数据增强使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值