调用相机进行保存

cv::VideoWriter 是 OpenCV 中的一个类,用于将图像序列保存为视频文件。它提供了一个方便的方法,可以将一系列帧以特定的编码方式写入视频文件,从而创建自定义的视频。

cv::VideoWriter(const String& filename, int fourcc, double fps, Size frameSize, bool isColor = true);


参数
	filename: 要保存的输出视频文件的文件名,可以包括文件扩展名(如 ".avi"、".mp4" 等)。
    fourcc: 一个四字符编码,用于指定视频编解码器。通常,使用四字符编码是指定视频文件的编码方式。例如,cv::VideoWriter::fourcc('M', 'J', 'P', 'G') 表示使用 MJPEG 编码器,cv::VideoWriter::fourcc('X', 'V', 'I', 'D') 表示使用 XVID 编码器。你可以根据需要选择合适的编码器。
    fps: 视频的帧率,表示每秒显示的帧数。
    frameSize: 视频帧的大小,通常是一个 cv::Size 对象,包括宽度和高度。
    isColor: 一个布尔值,指示是否保存彩色视频。如果为 true,则保存彩色视频,如果为 false,则保存灰度视频。


相机保存视频的案例
#include <opencv2/opencv.hpp>

int main() {
    // 打开摄像头或加载视频文件
    cv::VideoCapture cap(0); // 0 表示默认摄像头
    
    if (!cap.isOpened()) {
        std::cerr << "Error: Could not open camera!" << std::endl;
        return -1;
    }
    
    // 获取摄像头的帧宽度和帧高度
    int frameWidth = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));
    int frameHeight = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));
    
    // 创建 VideoWriter 对象来保存视频
    cv::VideoWriter videoWriter("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(frameWidth, frameHeight));
    
    if (!videoWriter.isOpened()) {
        std::cerr << "Error: Could not create video file!" << std::endl;
        return -1;
    }
    
    cv::Mat frame;
    
    while (true) {
        // 读取一帧视频
        cap >> frame;
        
        if (frame.empty()) {
            // 如果没有帧可读,退出循环
            break;
        }
        
        // 在这里可以对帧进行处理
        
        // 写入帧到视频文件
        videoWriter.write(frame);
        
        // 显示帧
        cv::imshow("Video", frame);
        
        // 检测按键,如果按下 'q' 键则退出循环
        if (cv::waitKey(30) == 'q') {
            break;
        }
    }
    
    // 释放摄像头和 VideoWriter 资源
    cap.release();
    videoWriter.release();
    cv::destroyAllWindows();
    
    return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐