OpenCV——实现视频图像的旋转

# Rotate

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\2.mp4'
output_video_path = r'D:\desk\3.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)
print(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

while cap.isOpened():

    frame_count +=1
    ret, frame = cap.read()
    if not ret:
        break

    # 增加亮度
    # 确保像素值在0-255范围内
    # enhanced_frame = cv2.add(frame, brightness_factor)

    if frame_count % 1 == 0:
        angle += 2.4

    frame = rotate_img(frame,angle = angle)
    # 写入处理后的帧到输出视频
    out.write(frame)

    # 按 'q' 退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

可以通过frame_count去调整多少帧旋转多少angle。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中,可以使用getRotationMatrix2D函数来实现图像旋转。该函数接受三个参数:旋转中心点坐标、旋转角度和缩放比例。例如,可以使用以下代码来旋转图像: ``` void rotate_demo(Mat& image) { Mat dst, M; int w = image.rows; int h = image.cols; // M 是用来旋转变换相乘的矩阵 M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0); // 计算新画布的尺寸 double cos = abs(M.at(0, 0)); double sin= abs(M.at(0, 1)); int nw = cos * w + sin * h;//新画布的宽 int nh = sin * w + cos * h;//新画布的高 // 将目标图像移到中心 M.at(0, 2) = (nw / 2 - w / 2); M.at(1, 2) = (nh / 2 - h / 2); // 进行仿射变换 warpAffine(image, dst, M, Size(nw,nh), INTER_LINEAR, 0, Scalar(0,255,0)); imshow("旋转图像", dst); } ``` 这个函数会将图像绕指定的中心点旋转一定角度,并且可以通过缩放比例来调整图像大小。在函数中,我们首先计算了新画布的尺寸,然后根据计算得到的矩阵M进行仿射变换,最后显示旋转后的图像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [opencv图像旋转](https://download.csdn.net/download/u013088062/8303155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [opencv图像处理——图像旋转](https://blog.csdn.net/sun_rui_houqi/article/details/108836570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值