多张图片转视频

import cv2
import os

def img2video():
    # 设置要转换的图片路径、FPS和输出视频文件名
    img_folder = r'D:\3_data\image_folder'
    fps = 30
    video_name = 'output_video.avi'

    # 获取所有图片文件名
    img_files = sorted([os.path.join(img_folder, f) for f in os.listdir(img_folder) if
                        f.endswith('.jpg') or f.endswith('.png') or f.endswith('.tif')])

    # 获取第一张图片的尺寸作为视频尺寸
    img = cv2.imread(img_files[0])
    height, width, channels = img.shape

    # 创建VideoWriter对象,设置视频编码器和FPS
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    video_writer = cv2.VideoWriter(video_name, fourcc, fps, (width, height))

    # 逐帧读取图片并写入视频文件中
    for img_file in img_files:
        img = cv2.imread(img_file)
        video_writer.write(img)

    # 释放资源
    video_writer.release()


def get_video_frame():
    # 打开视频文件
    video_path = 'output_video.avi'
    cap = cv2.VideoCapture(video_path)

    # 获取视频的帧率和总帧数
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

    # 打印帧率和帧数
    print('FPS:', fps)
    print('Frame count:', frame_count)

    # 释放资源
    cap.release()


if __name__ == '__main__':
    img2video()
    get_video_frame()
在Java中,可以使用第三方库如JAVACV(Java Advanced Imaging and Video Library)或者更专业的FFmpeg库来将多张图片合成视频。以下是一个简单的步骤概述: 1. **安装必要的库**:首先需要在项目中引入适当的依赖。对于JAVACV,你可以通过Maven或Gradle添加相应版本。 2. **创建VideoWriter对象**:使用`org.bytedeco.javacpp.opencv.VideoCapture`和`org.bytedeco.javacpp.opencv.VideoWriter`来创建输入图像文件的读取器和输出视频的写入器。 ```java import org.bytedeco.opencv.opencv_core.*; import org.bytedeco.opencv.opencv_videoio.*; // ... VideoCapture capture = new VideoWriter(); capture.open("output.mp4", VideoWriter_PROP_FOURCC, 25, // 视频帧率和编码格式 new Size(width, height), // 输出视频尺寸 true); // 是否为彩色 ``` 3. **加载和处理图片**:遍历所有图片文件,读取每一帧并将其换成Mat(OpenCV矩阵)对象。 ```java List<Mat> images = new ArrayList<>(); File[] files = new File("image_directory").listFiles((dir, name) -> name.endsWith(".jpg")); // 图片目录 for (File file : files) { Mat imageMat = Imgcodecs.imread(file.getAbsolutePath()); images.add(imageMat); } ``` 4. **写入视频**:将读取到的图片逐帧写入到视频中。 ```java for (Mat frame : images) { if (!capture.grab()) break; // 如果读取失败则跳出循环 if (capture.isOpened()) capture.write(frame); // 写入图片视频 } capture.release(); // 释放资源 ``` 5. **清理内存**:确保所有的OpenCV资源都被正确关闭。 ```java Imgproc.destroyAllWindows(); System.gc(); // 强制垃圾回收,但这不是最佳实践,因为可能导致性能问题 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值