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

简介: 这篇文章提供了一个OpenCV的实例教程,展示了如何使用`createTrackbar()`函数实时设置和获取摄像头参数值,如饱和度、Gamma和亮度,并通过回调函数在程序中连续修改这些参数。

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).

以上我个人全部通过实验验证过的,不过本人也是学习opencv不久,如有错误,还请各位前辈指导。感觉我写的有用的可以关注一下我的博客哦。

相关文章
|
19天前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
55 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
19天前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
60 1
|
19天前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
64 0
|
18天前
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
34 1
|
18天前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
68 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
3月前
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
130 3
|
3月前
|
前端开发 计算机视觉
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
161 2
|
5月前
|
计算机视觉 索引 Python
openCV 3计算机视觉 Python语言实现 笔记__第二章 处理文件、摄像头和图形用户界面
openCV 3计算机视觉 Python语言实现 笔记__第二章 处理文件、摄像头和图形用户界面
|
6月前
|
编解码 API 计算机视觉
opencv从视频文件读取视频内容,从摄像头读取保存视频内容
opencv从视频文件读取视频内容,从摄像头读取保存视频内容