python
# Swing
import cv2
def rotate_img(image,angle):
# Reading the image
# dividing height and width by 2 to get the center of the image
height, width = image.shape[:2]
# get the center coordinates of the image to create the 2D rotation matrix
center = (width/2, height/2)
# using cv2.getRotationMatrix2D() to get the rotation matrix
rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=angle, scale=1)
# rotate the image using cv2.warpAffine
rotated_image = cv2.warpAffine(src=image, M=rotate_matrix, dsize=(width, height))
return rotated_image
# 视频路径和输出路径
input_video_path = r'D:\desk\20240713_test\ORI_VIDEOS\ir_rotate_20240713.mp4'
output_video_path = r'D:\desk\20240713_test\ORI_VIDEOS\Rotate\20240713_ori_ir_swing\ir_swing_1_20240713.mp4'
# 打开视频文件
cap = cv2.VideoCapture(input_video_path)
# 获取视频的帧率和帧大小
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
# 定义输出视频的编码和创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 定义编码器和文件格式,XVID是DivX兼容的MPEG-4编码器
out = cv2.VideoWriter(output_video_path, fourcc, fps, (frame_width, frame_height), True)
angle = 0
frame_count = 0
fuhao = 1
while cap.isOpened():
frame_count +=1
ret, frame = cap.read()
if not ret:
break
if frame_count % 1 == 0:
if abs(angle) == 30:
fuhao = -1*fuhao
angle = angle + fuhao * 1
print(angle)
frame = rotate_img(frame,angle = angle)
# 写入处理后的帧到输出视频
out.write(frame)
# 按 'q' 退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
解释:if frame_count % 1 == 0:设置多少帧处理一次,fuhao的作用是调整摆动方向,当angle角度的绝对值为30度时,调整摆动方向。