当前位置: 首页 > article >正文

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


http://www.kler.cn/a/410985.html

相关文章:

  • Flink中普通API的使用
  • 国土变更调查拓扑错误自动化修复工具的研究
  • 电影风格城市夜景旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • Easyexcel(6-单元格合并)
  • 利用开源图床的技巧与实践
  • 永磁同步电机末端振动抑制(输入整形)
  • 计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计
  • 聊一聊Elasticsearch的索引(2)
  • 一键生成唯美动漫图:ComfyUI-tPonynai详细搭建教程
  • 教学内容全覆盖:航拍杂草检测与分类
  • 大数据新视界 -- 大数据大厂之 Hive 数据桶:优化聚合查询的有效手段(下)(10/ 30)
  • 计算机网络 实验七 NAT配置实验
  • Figma入门-填充、描边、效果、导出
  • Ubuntu 22 安装 NVM 详细步骤及常见问题解决方案
  • 从零开始:Linux 环境下的 C/C++ 编译教程
  • 智慧公厕解决方案-城市公厕更智能、更干净
  • Lua--1.基础知识
  • 学习threejs,使用设置lightMap光照贴图创建阴影效果
  • QT QRadioButton控件 全面详解
  • 【西瓜书】剪枝与样本值处理——预剪枝、后剪枝、连续值、缺失值
  • python深度学习机器学习编程序接单服务代码指导编写脚本调试爬虫
  • docker 通过Dockerfile自定义的镜像部署Springboot项目
  • 一个专为云原生环境设计的高性能分布式文件系统
  • C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
  • 华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座
  • QML学习 —— 34、视频媒体播放器(附源码)