RoboMaster 视觉 摄像头教程

简介: 这篇文章是RoboMaster视觉教程的一部分,介绍了摄像头的参数选择、曝光和Gamma矫正技术,以及如何在Linux环境下使用OpenCV库来配置和操作摄像头,以满足高速视觉处理的需求。

RoboMaster视觉教程(1)

摄像头

摄像头参数

主流有CCD和CMOS摄像头,一般而言CCD摄像头体积大造价高精度高,而CMOS摄像头由于集成度高造价远低于CCD摄像头,同时CMOS摄像头的体积功耗等参数也相应地优于CCD摄像头。Robo一般用Cmos摄像头

卷帘曝光与全局曝光
通常我们在网上买到的摄像头都是卷帘曝光的摄像头,在日常使用时很难看出这两种摄像头的区别,但是在对速度要求高的领域这两种曝光方式的优劣就很明显了,
> 1、尤其是对于廉价的摄像头卷帘曝光的果冻效应更加明显。
> 2、除了果冻效应外,全局曝光的摄像头在低曝光时间的情况下的颜色饱和度更高

曝光
当我们拍摄能自主发光的物体时,降低曝光时间可以减少环境光的影响。这时通过阈值处理得到二值图就可以进一步处理。
在这里插入图片描述

可以明显对比到二者中第二个环境光的影响减少了

Gamma矫正
在上面提到曝光可以减少环境光的影响时候,忽略了一个问题就是我们能看到的中间的数字1的光线,也是环境光的一部分。低曝的时候也很容易让数字彻底看不见如下最左图。

在这里插入图片描述

对此一种解决方法是:提高摄像头的Gamma值
当Gamma提高时图像中亮度较低的区域的亮度会被提高。
实现方法如下:
在这里插入图片描述

可以简单理解该图:提高Gamma后。像素亮度越低,提高速度越快,像素亮度越高,提高速度越慢。所以提高Gamma后对比度下降。我们就可以看到4了。

与此同时观察到图中被提高亮度后,背景杂光提高后和数字四还是有很大的边缘阈值对比度很明显。只要我们提高对比度到适合程度,然后再选取杂光中最亮的像素值减去原图就可以消去杂光。再提高对比度即可

帧率与摄像头选型

对于RoboMaster比赛而言,识别的速度当然是越快越好,所以摄像头帧率也是越高越好。由于带宽的限制帧率和分辨率通常互相制约,想要高帧率分辨率就会低。
在实战中我们一般用分辨率640*480左右的图片,用彩色卷帘相机

镜头

镜头焦距一般用6mm或8mm左右的镜头比较合适,在这个焦距下3m左右的装甲板拍的很清楚。

Linux摄像头驱动

#pragma execution_character_set("utf-8")
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>

int main()
{
    cv::VideoCapture capDevice(0);
    capDevice.open(0);
    //设置摄像头采集图像分辨率
    capDevice.set(cv::CAP_PROP_FRAME_WIDTH, 1024.0);
    capDevice.set(cv::CAP_PROP_FRAME_HEIGHT, 960.0);

    capDevice.set(cv::CAP_PROP_FRAME_WIDTH, 1080);//宽度 
    capDevice.set(cv::CAP_PROP_FRAME_HEIGHT, 960);//高度
    //capDevice.set(cv::CAP_PROP_FPS, 30);//帧率 帧/秒
    capDevice.set(cv::CAP_PROP_BRIGHTNESS, 1);//亮度 1
    capDevice.set(cv::CAP_PROP_CONTRAST, 60);//对比度 40
    capDevice.set(cv::CAP_PROP_SATURATION, 64);//饱和度 50
    capDevice.set(cv::CAP_PROP_HUE, 0);//色调
    capDevice.set(cv::CAP_PROP_EXPOSURE, -7);//曝光 50
    cv::Mat srcImage;

    //宽度 
    double width = capDevice.get(cv::CAP_PROP_FRAME_WIDTH);
    //高度
    double height = capDevice.get(cv::CAP_PROP_FRAME_HEIGHT);
    //帧率 帧/秒
    //int fps = capDevice.get(cv::CAP_PROP_FPS);
    //亮度
    double bright = capDevice.get(cv::CAP_PROP_BRIGHTNESS);
    //对比度
    double contrast = capDevice.get(cv::CAP_PROP_CONTRAST);
    //饱和度
    double saturation = capDevice.get(cv::CAP_PROP_SATURATION);
    //色调
    double hue = capDevice.get(cv::CAP_PROP_HUE);
    //曝光时长
    double exposure = capDevice.get(cv::CAP_PROP_EXPOSURE);

    //设置绘制文本的相关参数
    char text[255] = "";
    int font_face = cv::FONT_HERSHEY_COMPLEX;
    double font_scale = 1;
    int thickness = 1;

    while (true) {
        if (capDevice.isOpened())
        {
            capDevice >> srcImage;
        }

        sprintf(text, "width:%0.1f height:%0.1f exposure:%0.1f", width, height, exposure);
        cv::putText(srcImage, text, cv::Point(20, 30), font_face, font_scale, cv::Scalar(0, 255, 255), thickness, 8, 0);

        sprintf(text, "bright:%0.1f contrast:%0.1f saturation:%0.1f hue:%0.1f", bright, contrast, saturation, hue);
        cv::putText(srcImage, text, cv::Point(20, 90), font_face, font_scale, cv::Scalar(0, 255, 255), thickness, 8, 0);

        imshow("image", srcImage);
        cv::waitKey(30);
    }
}``

代码来源:https://www.so.com/s?ie=utf-8&src=360se7\_addr&q=opencv4%E7%9A%84%E6%91%84%E5%83%8F%E5%A4%B4video.set
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
参考博客:https://blog.csdn.net/u010750137/article/details/96428059

相关文章
|
1天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
2月前
|
人工智能
三文带你轻松上手鸿蒙的AI语音03-文本合成声音
三文带你轻松上手鸿蒙的AI语音03-文本合成声音
63 1
三文带你轻松上手鸿蒙的AI语音03-文本合成声音
|
1月前
|
人工智能 小程序
【一步步开发AI运动小程序】五、帧图像人体识别
随着AI技术的发展,阿里体育等公司推出的AI运动APP,如“乐动力”和“天天跳绳”,使云上运动会、线上健身等概念广受欢迎。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章分为四部分:初始化人体识别功能、调用人体识别功能、人体识别结果处理以及识别结果旋转矫正。下篇将继续介绍人体骨骼图绘制。
|
6月前
|
文字识别 监控 API
视觉智能开放平台产品使用合集之是否支持录屏视频以及实时视频里识别人脸
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
6月前
|
算法 计算机视觉
图像处理之老照片特效
图像处理之老照片特效
28 0
|
7月前
|
编解码 编译器 网络安全
LabVIEW使用视觉采集软件从GigE视觉相机进行采集 1
LabVIEW使用视觉采集软件从GigE视觉相机进行采集 1
226 0
|
7月前
|
机器学习/深度学习 API Android开发
视觉智能平台常见问题之摄像头抓拍到包含人脸的照片如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
视觉智能平台常见问题之摄像头抓拍到包含人脸的照片如何解决
|
机器学习/深度学习 人工智能 文字识别
智能图像处理技术:开启未来视觉时代
围绕文档图像处理及 OCR 领域等前沿技术展开讨论,寻找文档图像处理领域的未来进阶方向。
276 0
智能图像处理技术:开启未来视觉时代
|
机器学习/深度学习 算法 计算机视觉
【OpenVI-视觉生产系列】老片图像上色,一键开源体验
随着摄影技术的演进,彩色照片在现在已经非常普及,但仍然有大量历史黑白照片遗留。图像上色可以对这些宝贵的旧时代遗产进行修复,令老照片重获新生。
1006 0
【OpenVI-视觉生产系列】老片图像上色,一键开源体验
|
机器学习/深度学习 数据可视化 图形学
【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)
【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)
149 0
【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)