OpenCV中读取摄像头

2023-11-09

    人脸识别首先要做的就是摄像头数据的读取,这里OpenCV很好的实现了摄像头数据的读取。

在OpenCV1.x中用到的函数是:

1、打开摄像头或视频文件

    CvCapture* cvCreateCameraCapture(int index);    //index 摄像头的设备号, 只有一个摄像头时,用0就好了

    CvCapture* cvCreateFileCapture(const char* filename);  //读取视频文件

而在后面的版本变成了:

    CvCapture* cvCaptureFromCam(int index);   // 从摄像头的视频流分配和初始化CvCapture结构。

    CvCapture* cvCaptureFromFile(const char* filename);

对应的释放函数是:

    void cvReleaseCapture(CvCapture** capture);

 2、读视频

     int cvGrabFrame(CvCapture* capture);

该函数从摄像头或视频文件抓取帧,但是存放在内存里,可能是压缩的格式。

    IplImage* cvRetrieveFrame(CvCapture* capture);

该函数返回由函数cvGrabFrame抓取的图像的指针。

 

    IplImage* cvQueryFrame( CvCapture* capture );  //从摄像头或者文件中抓取并返回一帧

该函数从摄像头或者文件中抓取并返回一帧,然后解压并返回这一帧,它是cvGrabFrame和cvRetrieveFrame函数在一起的组合。返回的图像不可被用户释放或者修改。

 

c++中用的是videocapture这个类实现的这些函数

class CV_EXPORTS_W VideoCapture
{
public:
    CV_WRAP VideoCapture();
    CV_WRAP VideoCapture(const string& filename);
    CV_WRAP VideoCapture(int device);

    virtual ~VideoCapture();
    CV_WRAP virtual bool open(const string& filename);
    CV_WRAP virtual bool open(int device);
    CV_WRAP virtual bool isOpened() const;
    CV_WRAP virtual void release();

    CV_WRAP virtual bool grab();
    CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0);
    virtual VideoCapture& operator >> (CV_OUT Mat& image);
    CV_WRAP virtual bool read(CV_OUT Mat& image);

    CV_WRAP virtual bool set(int propId, double value);
    CV_WRAP virtual double get(int propId);

protected:
    Ptr<CvCapture> cap;
};


 

这些函数很好的实现了视频的读取。这是实现的一个简单的例子。

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened()) // check if we succeeded
        return -1;
    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) 
            break;
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV中读取摄像头 的相关文章

  • unity3D 脚本中按键或鼠标输入响应函数

    简单地总结一下 unity中脚本实现输入 键盘和鼠标 的响应事件函数 不够完善 以后碰到再慢慢添加 键盘输入 1 Input GetKey up 按住键盘上键 2 Input GetKey KeyCode UpArrow 按住键盘上键 Ke
  • JS实现将数组中某个属性值相同的元素,放在一起

    function sortArr arrList str var arr 大数组 t 临时属性值相同数组 临时的变量 tmp if arrList length gt 0 tmp arrList 0 str 将相同类别的对象添加到同一个数组
  • [从零开始学习FPGA编程-44]:视野篇 - 集成电路助力数字化时代高质量发展-1-集成电路芯片主要形态

    目录 前言背景 什么是集成电路 什么是数字化时代
  • 为什么小程序预览时必须打开‘调试工具vconsole’才能正常运行?

    这是因为没有为小程序配置域名导致的 预览或者使用小程序体验版的时候 小程序会自动校验你是否配置了合法的域名 如果没有配置 还是使用的ip地址 这样就会造成一个现象 在开发工具上以及真机调试时 都能正常运行 但预览就不行 但只要在预览时 打开
  • c++如何使用yaml来进行配置

    c 如何使用yaml来进行配置 yaml的基本语法可以参考这个博客 https www cnblogs com sddai p 9626392 html yaml的使用也可以参考这个博客 https www it610 com articl
  • 基础算法题——迷宫(递推)

    迷宫 题目链接 解题思路 暴力法 利用 dfs 遍历每一条可能的路径 将遍历的权值和不断取余 不足 当 n m 取较大的情况下 所遍历的路径可能会暴增 出现超时的情况 递推法 从题目上我们可以发现 最终的权值和是要对 mod 取余的 利用这
  • 查询SQLSERVER执行过的SQL记录(历史查询记录)

    有的时候 需要知道近段时间SQLSERVER执行了什么语句 可以用下面的方法 SELECT TOP 1000 QS creation time SUBSTRING ST text QS statement start offset 2 1
  • Linux教程系列 pdf下载(鸟哥私房菜等)

    鸟哥的Linux私房菜 基础篇 第四版 pdf 下载 LINUX内核设计与实现 pdf 下载 Linux 操作系统 基础操作 教学 doc 下载 linux内核深入剖析基于0 11 pdf 下载 Linux系统命令及其使用详解 doc 下载
  • 静态变量与动态变量的区别

    目录 一 定义 1 变量与常量 2 局部变量 局部变量 定义在函数中的变量 3 全局变量 4 动态变量和静态变量 二 区别 1 局部变量与全局变量的对比 2 静态变量与动态变量 一 定义 1 变量与常量 变量 指的是在程序运行过程中 可以通
  • Linux 高级进程管理

    1 让出处理器 Linux提供一个系统调用运行进程主动让出执行权 sched yield 进程运行的好好的 为什么需要这个函数呢 有一种情况是用户空间线程的锁定 如果一个线程试图取得另一个线程所持有的锁 则新的线程应该让出处理器知道该锁变为
  • 动态sql MyBatis处理多对一,一对多映射关系

    MyBatis处理模糊查询 1 用 符代替 接参 避免 占位符被解析成 在字符串中无法接参 select from user where username like name 2 使用sql语句中字符串拼接的函数 select from u
  • 微信小程序背景图片设置问题

    我们都知道 用css给网页设置背景图片 可以导入网络图片和本地图片 1 网络图片 元素定位 background image url https timgsa baidu com timg image quality 80 size b99
  • CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling ‘cublasSgemm’

    运行transformer模型是报错如题 1 减小batch size 原因是调用cublas函数时会生成句柄 占用一定的内存 确保剩余内存够使用 2 gpu驱动版本和cuda torch版本的匹配问题 低版本的gpu驱动 尝试换成11 0
  • 怎么上传本地项目或文件到SVN服务器

    实验需要将本地的文件上传到SVN的doc文件夹下 在桌面右击 TortoiseSVN gt Repo brower gt 输入你的仓库的url gt 输入用户姓名和密码 即可访问到svn 右键点击Add File即可添加要上传的文件 如下图
  • c++文件输入与输出

    基于流的文件IO 头文件 ofstream 写文件 ifstream 读文件 fstream 读写文件 using namespace std 打开文件 std ifstream fin xxx txt std ifstream fin f
  • 几个更优雅、更高效 Pythonic 代码写法!

    本文分享几个鲜为人知的 Pythonic 技巧 这些技巧非常有用 但并不广为人知 通过学习和使用这些技巧 可以帮你节省时间和精力 并使你的代码更加优雅和高效 1 三元运算符 三元运算符是 if else 语句的简写 语法是value if
  • Flink自定义HBaseSink类

    文章目录 HBaseCell类 HBaseSink类 HBaseCell类 package com vic flink entity import lombok Data import java util HashMap Data publ
  • cookie原理详解及单点登录原理

    cookie一般是用来客户端存储信息的 用它可以进行用户信息的检验 实际案例 单点登录 cookie的原理 第一次访问网站的时候 浏览器发出请求 服务器响应请求后 会将cookie放入到响应请求中 通过Set Cookie字段 在浏览器第二
  • awk脚本

    编写awk脚本 1 从 Hello World 开始 we create a file named test that contains a single line This example shows a script that cont

随机推荐

  • Springboot整合MyBatisPlus框架操作MySQL

    1 MyBatis Plus概述 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效
  • Synchronized实现原理

    查看带有Synchronized语句块的class文件可以看到在同步代码块的起始位置插入了moniterenter指令 在同步代码块结束的位置插入了monitorexit指令 JVM需要保证每一个monitorenter都有一个monito
  • SQL Server与Java的类型对应,Char用setString设值

    表列出了基本 SQL Server JDBC 和 Java 编程语言数据类型之间的默认映射 SQL Server 类型 JDBC 类型 java sql Types Java 语言类型 bigint BIGINT long timestam
  • Java实现桶排序

    桶排序 使用额外空间 以空间换时间思想 因此时间复杂度为O n m 1 1 基本思想 桶排序是所有排序算法中最快 也是最简单的排序算法 基本思想是在知道所有待排元素的范围后 准备和这个范围同样数量的桶 并将元素放在对应的桶中 如待排元素为
  • java焦点图_基于JavaScript实现焦点图轮播效果

    不管是高校的网站还是电商的页面 焦点图的切换和轮播应该是一项不可或缺的应用 今天把焦点图轮播制作的技术要点做下笔记 以供日后查看 一 结构层 HTML 焦点图的HTML结构很简单 就是一个父容器 id box 包含三个子容器 分别存放图片
  • lua:table转json字符串

    table转字符串 function table2JsonString objTable local jsonString jsonString local t type objTable if t number then jsonStri
  • harbor修改配置文件后重启

    docker compose down prepare docker compose up d 转载于 https www cnblogs com wang lei p 11540792 html
  • 自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gr

    http blog csdn net u012527560 article details 51752070 自从AndroidStudio更新到2 2 就有了CMake和传统JNI两种开发NDK的方法 主要就是在目录结构和build gr
  • 使用JSON

    JSON Javascript Object Notion Javascript对象表示法 JSON是Javascript对象表示法的一个子集 它必然使用了Javascrip对象表示法中的所有相同的规则和基础类型 JSON可以表示对象的实例
  • 实战wxPython:044 - 高级控件之HtmlWindow

    本文介绍如何在Python的GUI工具中嵌入HTML页面 wxPython的wx html和wx html2模块支持解析和显示HTML文件内容 wx html HtmlWindow对象是一个通用的HTML浏览器 但不是一个全功能的浏览器 所
  • Go语言基础整理集合

    什么是Go语言 go语言是一门静态强类型语言 什么是动态和静态 可以理解为解释型和编译型 python 动态解释型语言 一边编译一边执行 golang java 静态编译型语言 必须先将文件编译成可执行文件后才能运行 什么是强类型语言 强制
  • qt ini 文件读写以及 节点的遍历

    qt 的配置文件一般都用ini文件 在此我记录下使用方法 ini 组成简介 INI文件由节点 键 值组成 如下面代码中 fileSetting gt setValue fileSave savePath filePath 节点 fileSa
  • mysql之sql_mode参数

    参数sql mode用来设置mysql中语法校验的严格程度 用此来保证数据的准确性 常用的可选值说明如下 参数值 说明 ONLY FULL GROUP BY GROUP BY聚合查询中如果SELECT中的列没在GROUP BY子句中 那么这
  • 人脸关键点序号106个 98个

    106关键点 forked from 北京智云视图科技有限公司 HyperLandmark 68和106对应 从0开始编号 17 19 21 28 22 24 26 74 36 94 39 59 42 27 45 20 31 31 35 9
  • 2019-CVPR 缺陷/瑕疵检测论文介绍及基于pytorch实现的代码

    Segmentation Based Deep Learning Approach for Surface Defect Detection的介绍和实现 本文介绍 论文解析 1 INTRODUCTION 2 Related Work 3 S
  • 基于Chatbot UI 实现ChatGPT对话-V1.3-预告

    先讲一个悲伤的故事 小红书被封号了 emo 给俺点点关注吧 这次一定好好发言 迷茫的21世纪的新青年 一 预告图 自定义随机量 让回复按需设置 二 更新功能 随机量 参数名 Temperature 温度 我更愿意称之为随机量 它根据调的数值
  • Python报错及解决办法一

    问题一 C Users asus gt print Hello World 无法初始化设备 PRN 解决办法 先执行python解释器 再执行python代码 C Users asus gt python Python 3 10 6 tag
  • ValueError: shapes (1,3) and (100,1) not aligned: 3 (dim 1) != 100 (dim 0)

    ValueError shapes 1 3 and 100 1 not aligned 3 dim 1 100 dim 0 出现这个错误 是你数据的维度不对 这个问题是出现在写logistic Regression 代码时出现的 用scip
  • C++拷贝构造函数

    注意 1 当函数的参数为类的对象时 那么在函数的形参与调用这个函数时的实参并不一定内容一模一样 因为是调用的拷贝构造函数 因此也有可能自定义的拷贝构造函数会导致两个对象的内容不一样 2 拷贝构造函数 只对非静态属性进行拷贝 拷贝构造函数调用
  • OpenCV中读取摄像头

    人脸识别首先要做的就是摄像头数据的读取 这里OpenCV很好的实现了摄像头数据的读取 在OpenCV1 x中用到的函数是 1 打开摄像头或视频文件 CvCapture cvCreateCameraCapture int index inde