摄像头原始数据读取——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;
}