OpenCV4学习笔记(2):显示相机视频流的帧率

简介: 这篇文章是OpenCV4学习笔记的第二部分,介绍了如何通过OpenCV4在显示相机视频流时计算并显示其帧率,使用`getTickCount`和`getTickFrequency`函数来测量帧时间,并用`putText`在图像上绘制帧率信息。

OpenCv实时设置摄像头参数/获得摄像头参数值的方法论

一、提醒:

在开始,摄像机修改之旅之前,出于负责任的态度。我想我需要提醒以下三点:

一、一旦你修改了这些参数,你的摄像头就被改动了,这是永久的。
而相机初始值一般是公司相对当前找的相对综合最优参数。所以最好先记住相机这项参数的初始值在修改。否则切勿随意修改这些参数。

二、修改参数并不是你修改多少就是多少,这因为是修改底层硬件的参数,所以需要硬件支持你才能修改。比如:你就不能修改FPS=520。
三、有些参数你测试的这部相机是不能修改的。道理同上,修改是需要硬件支持的,支持修改才能修改。

单独一次的修改很常见,比如修改一下饱和度=50,就是capture.set(CAP_PROP_SATURATION,50);//注意:capture是实例化后的
这样就修改成功了。

相关函数功能解释:

capture.get(CAP_PROP_GAMMA)//只有一个参数

功能:返回摄像机capture的GAMMA值,想要返回其他值就修改里面的参数,一些参数在Opencv4中参数名在最下文给出了一部分。

capture.set(CAP_PROP_GAMMA, Gamma)

功能:将摄像机capture的GAMMA值修改为Gamma。

以上就是这两个函数的格式

二、连续修改怎么办呢?

这里我需要引入一个Opencv自带函数:createTrackbar()
对这个函数不是很清楚的可以看这篇博客:https://blog.csdn.net/qq\_51116518/article/details/119734918?spm=1001.2014.3001.5501

三、连续修改测试程序

摄像机createTrackbar()连续修改模板:

第一步:全局定义相机和createTrackbar第三个参数也就是带&参数的。
第二步:手敲回调函数。
第三步:在循环while(1)外执行createTrackbar()函数。
第四步:在循环内初始化每一个onChange()函数为(0,0);
现在理论完备,“魔法”开始!
测试程序的功能:
1、利用滑动条实时修改饱和度、Gramma、亮度。
2、摁1,打印当前程序饱和度、Gramma、亮度到控制台

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【原始图窗口】"

VideoCapture capture;//注意:多维同时控制需要相机和
int saturation = 60;
int Gamma = 72;
int light = 50;

void onSaturationChange(int , void* )
{
    capture.set(CAP_PROP_SATURATION, saturation);
}
void onGammaChange(int , void* )
{
    capture.set(CAP_PROP_GAMMA, Gamma);
}
void onLightChange(int, void*)//回调函数
{
    capture.set(CAP_PROP_BRIGHTNESS, light);
}
void show()
{
    cout << "饱和度:" << capture.get(CAP_PROP_SATURATION) << endl;
    cout << "Gamma值:" << capture.get(CAP_PROP_GAMMA) << endl;
    cout << "Light:" << capture.get(CAP_PROP_BRIGHTNESS) << endl<<endl;
}
/*
    滑动改变饱和度Gamma,Light值。
    摁1打印当前相机值
*/
int main()
{
    Mat frame;
    namedWindow(WINDOW_NAME1, WINDOW_AUTOSIZE);
    capture.open(0);//这里默认打开你电脑内置摄像头,如果有外置的可以设为1
    if (! capture.isOpened())
    {
        return -1;
    }
    cout << "摄像机原本参数:" << endl;
    show();
    createTrackbar("饱和度", WINDOW_NAME1, &saturation, 128, onSaturationChange);//createTrackbar必须在外面
    createTrackbar("Gamma", WINDOW_NAME1, &Gamma, 500, onGammaChange);
    createTrackbar("Light", WINDOW_NAME1, &light, 100, onLightChange);

    while (1)
    {
        capture >> frame;  //读取当前帧
        flip(frame, frame,1);
        if (frame.empty())
        {
            break;
        }
        onSaturationChange(0, 0);//里面每一个加上一个初始化
        onGammaChange(0, 0);
        onLightChange(0, 0);
        imshow(WINDOW_NAME1, frame);  //显示当前帧
        char c = waitKey(10);
        if ( c== 27)  break;
        if (c == '1')//表示摁1显示当前相机参数
        {
            cout << "调整后的参数:" << endl;
            show();
        }
    }
    return 0;
}
}

出于复杂度问题,测试程序就不搞很多实时修改参数了。这个程序还是比较好理解,不是很理解的话看一下上面那个博客理解一下createTrackbar()函数。应该就差不多掌握了。有这个例子我想,应该其他所有相关参数都可以这样实时修改了。

这个是程序运行的界面:

在这里插入图片描述

以下是一些相机参数,具体哪些能修改建议还是实践一下,我之后再过来更新一波。

CAP_PROP_POS_MSEC //视频文件在以微秒为单位的当前的位置或者视频抓取的时间戳。 –
CAP_PROP_POS_FRAMES //解码基于0索引的帧,然后自动抓取下一帧. –
CAP_PROP_POS_AVI_RATIO //相对于视频文件的位置: 0 表示视频的开始, 1 表示视频的结尾. –
CAP_PROP_FRAME_WIDTH //视频流中帧的宽度. – CAP_PROP_FRAME_HEIGHT
//视频流中帧的高度. – CAP_PROP_FPS //帧速率. – CAP_PROP_FOURCC
//4-character code of codec. – CAP_PROP_FRAME_COUNT //视频文件中帧的总数. –
CAP_PROP_FORMAT //通过 retrieve()来返回Mat对象的格式 . – CAP_PROP_MODE
//Backend-specific 的值指示当前的拍摄模式 – CAP_PROP_BRIGHTNESS //图像的亮度
(only for cameras). – CAP_PROP_CONTRAST //图像的对比度 (only for
cameras). – CAP_PROP_SATURATION //图像的饱和度 (only for cameras). –
CAP_PROP_HUE //图像的色调 (only for cameras). – CAP_PROP_GAIN
//图像的增益 (only for cameras). – CAP_PROP_EXPOSURE //图像的曝光度(only
for cameras).

相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
159 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
2月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
113 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
2月前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
402 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
2月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
120 1
|
2月前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
153 0
|
2月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
83 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
2月前
|
编解码 关系型数据库 计算机视觉
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
本文介绍了如何在OpenCV中通过使用cisco开源的openh264库来解决不支持H.264编码的问题,并提供了完整的代码示例。
146 0
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
|
2月前
|
数据可视化 计算机视觉 Python
opencv可视化学习笔记(一):绘制多图在一个画布上
这篇文章介绍了如何使用OpenCV和PIL库将多张图片绘制在同一个画布上,并提供了具体的Python代码实现。
35 0
opencv可视化学习笔记(一):绘制多图在一个画布上
|
2月前
|
计算机视觉 Python
Opencv学习笔记(七):如何根据opencv将BGR转换为HSV
使用OpenCV库在Python中将BGR图像转换为HSV颜色空间的两种方法:一种是直接使用cv2.cvtColor函数,另一种是手动实现RGB到HSV的转换。
48 0
Opencv学习笔记(七):如何根据opencv将BGR转换为HSV
|
2月前
|
计算机视觉 Python
Opencv学习笔记(十):opencv和base64之间的转换
本文介绍了如何使用Python和OpenCV库将图像在Base64编码和OpenCV可读格式之间进行转换。
75 0