本文分析在使用OpenCV捕获摄像头时发现的两个问题:

  1. 使用capture.get(CV_CAP_PROP_FPS)方法获取帧率为0!
  2. waitKey()函数有几个作用?改变它的参数大小会影响计算得到的FPS大小

分析:

  1. OpenCV中的fps只能在读取视频的时候获得。如果是摄像头,可根据fps的定义自己计算,网上也有人遇到过读取摄像头帧率为0的情况—博客园。
  2. waitkey有两个作用,且在imshow之后如果没有waitKey语句则不能正常显示图像。在下面给的实验代码中计算fps意义不大,只可大致测试出摄像头图像处理算法的时间消耗,使用MFC或者QT这个时候的fps才有意义,这里的fps是指游戏中的图像刷新率 是衡量游戏性能的一个指标。
  1. It waits for x milliseconds for a key press. If a key was pressed during that time, it returns the key’s ASCII code. Otherwise, it returns -1.
  1. It handles any windowing events, such as creating windows with cv::namedWindow(), or showing images with cv::imshow().

waitkey函数的定义如下:

int cvWaitKey( int delay=0 )
返回值为int型,函数的参数为int型,当delay小于等于0的时候,如果没有键盘触发,则一直等待,此时的返回值为-1,否则返回值为键盘按下的码字;当delay大于0时,如果没有键盘的的触发,则等待delay的时间,此时的返回值是-1,否则返回值为键盘按下的码字。

附上代码:

#include <stdlib.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"int main(int argc, const char** argv)
{cv::Mat frame;// 可从摄像头输入视频流或直接播放视频文件cv::VideoCapture capture(0);//cv::VideoCapture capture("vedio1.avi");double fps;char string[10];  // 帧率字符串cv::namedWindow("Camera FPS");double t = 0;while (1){t = (double)cv::getTickCount();if (cv::waitKey(1) == 1) { break; }if (capture.isOpened()){capture >> frame;// getTickcount函数:返回从操作系统启动到当前所经过的毫秒数// getTickFrequency函数:返回每秒的计时周期数// t为该处代码执行所耗的时间,单位为秒,fps为其倒数t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();fps = 1.0 / t;sprintf_s(string, "%.2f", fps);      // 帧率保留两位小数std::string fpsString("FPS:");fpsString += string;                    // 在"FPS:"后加入帧率数值字符串printf("fps: %.2f width:%d height:%d fps:%.2f\n", fps, frame.cols, frame.rows, capture.get(CV_CAP_PROP_FPS));// 将帧率信息写在输出帧上cv::putText(frame, // 图像矩阵fpsString,                  // string型文字内容cv::Point(5, 20),           // 文字坐标,以左下角为原点cv::FONT_HERSHEY_SIMPLEX,   // 字体类型0.5, // 字体大小cv::Scalar(0, 0, 0));       // 字体颜色cv::imshow("Camera FPS", frame);char c = cv::waitKey(30); //延时30毫秒// 注:waitKey延时越长 fps越小 出现跳帧 摄像头显示变卡if (c == 27) //按ESC键退出break;}else{std::cout << "No Camera Input!" << std::endl;break;}}
}

OpenCV~捕获摄像头 帧率fps和waitkey函数 问题相关推荐

  1. OpenCV捕获摄像头并进行录像、截图等功能的实现

    OpenCV捕获摄像头并进行录像.截图等功能的实现 本文主要介绍一个小项目,此项目实现了对于摄像头画面的捕捉以及,对于画面的截取和一段画面的存储和处理的功能 我们将采用三个类来进行实现 1 Captu ...

  2. opencv获取摄像头帧率分辨率

    python opencv 获取摄像头分辨率,设置摄像头分辨率 import cv2cap = cv2.VideoCapture(0)#先设置参数,然后读取参数cap.set(3,1280) # wi ...

  3. 【使用opencv方法计算帧率fps】

    getTickCount() 返回从操作系统启动到目前为止所经过的记时周期数 也就是当前的Tick的数量. getTickFrequency() 返回CPU的频率. 计算耗时 t1 = getTick ...

  4. python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频

    我们知道,OpenCV是一款强大的跨平台的计算机视觉库,使用它能完成我们对于图像和视频处理的很多功能,今天,我们使用OpenCV来捕获计算机摄像头的视频. 使用OpenCV捕获摄像头视频 我们知道,视 ...

  5. python opencv 保存摄像头视频,以及fourc编码的介绍

    之所以写这篇博客,主要还是想介绍一下fourcc编码 1 读取摄像头 1.1 正常读取一个摄像头 1.读取摄像头 只读取摄像头 没有做其他操作 import cv2# 获取摄像头 0代表摄像头索引 c ...

  6. python使用opencv调取摄像头捕获图片或视频通用模板

    之前一直不清楚opencv调用摄像头的具体方法,于是参考b站视频写了个通用模板,以后可以根据需要自行调整.视频链接 先定义图片和视频的保存路径 img_path = './img_video/test ...

  7. C++/Qt 使用OpenCV打开摄像头,旋转视频,计算fps

    C++/Qt 使用OpenCV打开摄像头,旋转视频,计算fps 设置摄像头参数 不要随意修改,同时也不一样会修改成功,需要根据实际摄像头的参数选择设置 /*设置摄像头参数 不要随意修改capture. ...

  8. 【转】用opencv使摄像头在30fps下捕获1080p的数据

    原文:http://blog.sina.com.cn/s/blog_9b493e7b0102xvn6.html opencv可以捕获摄像头数据.如果要读高分辨率和高帧率,可以用如下的设置: captu ...

  9. openCV之waitKey函数简介

    本文转自:http://blog.csdn.net/Micheal_w/article/details/41276903 OpenCV中的一个函数 函数原型为: . C++: int waitKey( ...

最新文章

  1. [Windows]ping itsafe环境变量
  2. python脚本画pie饼图_python 使用matplotlib.pyplot.pie绘制饼图
  3. 是先打工还是直接创业?答案让我惊呆了!
  4. Java成神之路——CGLIB使用
  5. 系统上云服务器地址,可以自己安装系统的云服务器地址
  6. Redis的复制(Master/Slave)
  7. C++ 工程实践(3):采用有利于版本管理的代码格式
  8. HDFS-windows下测试hdfs命令
  9. su如何变成实体_Sketchup实体工具怎么使用? SU实体工具的使用方法
  10. 一天一个 Linux 命令(27):mkfs 命令
  11. 100层楼,2个鸡蛋,最少要几次才能测试出鸡蛋能承受的最大楼层?
  12. [附源码]java毕业设计基于的高校学生考勤管理系统
  13. sourceinsight 的好处_代码阅读神器——Sourceinsight
  14. 嵌入式系统自动化测试工具
  15. 在编译humanoid_navigation相关软件包,出现 Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:解决方案
  16. Netapp FAS80xx C-mode存储规划
  17. ARM Compiler相关资料汇总
  18. 论文研读-图可视化-NetV.js:Web端可视化工具库
  19. VMware Fusion Pro 10 for Mac
  20. axios-带token下载excel

热门文章

  1. easyui Datagrid+searchbox 实现搜索功能
  2. 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
  3. win10如何开启自带的虚拟机?
  4. ${}和`${}`的用法
  5. LeetCode解析------111. 二叉树的最小深度-深度优先搜索
  6. iphone 传android,安卓和苹果手机怎么互传文件_安卓与苹果手机之间互传文件的方法教程_3DM手游...
  7. 2021年--至暗中寻找光明
  8. Linux下github的下载和使用
  9. 分享一个统计 Android 模块构建时长的脚本工具
  10. UC浏览器电脑板书签栏消失如何恢复?