Bootstrap

摄像头原始数据读取——opencv(cv::VideoCapture)

摄像头原始数据读取——opencv(cv::VideoCapture)

测试代码test.cpp

#include <iostream>
#include <string>

#include <opencv2/opencv.hpp>

std::string pixeformatcodec2string(int codec)
{
    char pixeformat_name[5] = { (char)((codec >> 0) & 0xFF),
                    (char)((codec >> 8) & 0xFF),
                    (char)((codec >> 16) & 0xFF),
                    (char)((codec >> 24) & 0xFF), '\0' };
    return std::string(pixeformat_name);
}

int main(int argc, const char** argv)
{
    cv::VideoCapture cap;   
    //打开video0设备,即/dev/video0     
    cap.open(0,cv::CAP_V4L2);
    
    std::cout<<"video width="<<cap.get(cv::CAP_PROP_FRAME_WIDTH)<<std::endl
            <<"video height="<<cap.get(cv::CAP_PROP_FRAME_HEIGHT)<<std::endl
            <<"video fps="<<cap.get(cv::CAP_PROP_FPS)<<std::endl
            <<"video pixeformat="<<pixeformatcodec2string((unsigned int)cap.get(cv::CAP_PROP_FOURCC))<<std::endl;
	//设置视频设备格式
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720);
    cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('Y', 'U', 'Y', 'V'));
    cap.set(cv::CAP_PROP_FPS, 10);

    std::cout<<std::endl;
    std::cout<<"video width="<<cap.get(cv::CAP_PROP_FRAME_WIDTH)<<std::endl
            <<"video height="<<cap.get(cv::CAP_PROP_FRAME_HEIGHT)<<std::endl
            <<"video fps="<<cap.get(cv::CAP_PROP_FPS)<<std::endl
            <<"video pixeformat="<<pixeformatcodec2string((unsigned int)cap.get(cv::CAP_PROP_FOURCC))<<std::endl;

    if (!cap.isOpened())
    {
            std::cerr<<"video open failed"<<std::endl;
            return -1;
    }

    cv::namedWindow("Video", 1);
    cv::resizeWindow("Video",cv::Size(1280,720));
    for (;;)
    {
            cv::Mat frame;
            //获取视频帧数据
            cap >> frame; 
            if (frame.empty())
            {
                return 0;
            }
            //显示图像        
            cv::imshow("Video", frame);
            
            if (cv::waitKey(25) >= 0)
            {
                break;
            }
    }
    cv::destroyAllWindows();
    cap.release();

    return 0;
}

;