Linux下OpenCV摄像头录像(c++)

opencv 从摄像头中读取视频并保存(c++版)_YouthDance-CSDN博客_opencv 保存摄像头视频

 参考如上

CMakeLists.txt

# cmake版本
cmake_minimum_required(VERSION 2.8.3) 
# c++ 11
set(CMAKE_CXX_FLAGS "-std=c++11")
# 项目名
project(test_opencv)
# 使用OpenCV
find_package(OpenCV REQUIRED)
# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 查找指定目录下的所有源文件,然后将结果存进指定变量名。语法:
# aux_source_directory( )
# 查找当前目录下的所有源文件
# 并将名称保存到SRC_LIST变量
aux_source_directory(. SRC_LIST)
# 生成可执行文件
add_executable(test_opencv ${SRC_LIST})
# 生成可执行文件后,为生成文件target添加库
target_link_libraries(test_opencv ${OpenCV_LIBS})

test_opencv.cpp   OpenCV 3版本

#include 
#include 
using namespace cv;
using namespace std;

int main()
{
    // 视频保存位置
    string outputVideoPath = "./test.avi";  

    // 打开摄像头
    VideoCapture capture0(0);  

    VideoWriter outputVideo;
    
    // 获取摄像机帧率
    int fps = capture0.get(CAP_PROP_FPS);  

    // 获取当前摄像头的视频信息
    cv::Size S = cv::Size((int)capture0.get(CV_CAP_PROP_FRAME_WIDTH),
                          (int)capture0.get(CV_CAP_PROP_FRAME_HEIGHT));
    // 打开视频路径,设置基本信息 open函数中你参数跟上面给出的VideoWriter函数是一样的
    outputVideo.open(outputVideoPath, CV_FOURCC('X', 'V', 'I', 'D'), fps, S, true);

    if (!outputVideo.isOpened()) {
        cout << "fail to open!" << endl;
        return -1;
    }

    // 图片帧
    cv::Mat frameImage;
    int count = 0;

    while(true){
        // 读取当前帧
        capture0 >> frameImage;
        if(frameImage.empty()) break;
        ++count;
        // 输出当前帧
        cv::imshow("output", frameImage);
        // 保存当前帧
        outputVideo << frameImage;
        if (char(waitKey(1)) == 'q') break;
    }
	return 0;
}

 test_opencv.cpp   OpenCV 4版本

#include 
#include 
#include 
using namespace cv;
using namespace std;
 
int main()
{
    // 视频保存位置
    string outputVideoPath = "./test.avi";  
 
    // 打开摄像头
    VideoCapture capture0(0);  
 
    VideoWriter outputVideo;
    
    // 获取摄像机帧率
    int fps = capture0.get(CAP_PROP_FPS);  
 
    // 获取当前摄像头的视频信息
    cv::Size S = cv::Size((int)capture0.get(CAP_PROP_FRAME_WIDTH),
                          (int)capture0.get(CAP_PROP_FRAME_HEIGHT));
    // 打开视频路径,设置基本信息 open函数中你参数跟上面给出的VideoWriter函数是一样的
    outputVideo.open(outputVideoPath, cv::VideoWriter::fourcc('X', 'V', 'I', 'D'), fps, S, true);
 
    if (!outputVideo.isOpened()) {
        cout << "fail to open!" << endl;
        return -1;
    }
 
    // 图片帧
    cv::Mat frameImage;
    int count = 0;
 
    while(true){
        // 读取当前帧
        capture0 >> frameImage;
        if(frameImage.empty()) break;
        ++count;
        // 输出当前帧
        cv::imshow("output", frameImage);
        // 保存当前帧
        outputVideo << frameImage;
        if (char(waitKey(1)) == 'q') break;
    }
	return 0;
}

执行:

  • cmake .
  • make
  • ./test_opencv
  • 生成录像视频test.avi

你可能感兴趣的:(OpenCV,Linux,opencv,c++,linux)