若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108489004
长期持续项目技术分享,Shang业Ding制Zi询博主,QQ:21497936 WX:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

合作案例专栏:案例分享(体验Demo可下载,只定制)

OpenCV开发专栏(点击传送门)

需求

  嵌入式window ce设备上的内窥镜相机程序。
  打开摄像头,兼容多种摄像头,摄像头分辨率切换(摄像头管理)。
  对图像进行翻转、旋转、亮度调整(图像基本算法管理)
  对调整后的图像进行拍照、延时拍照。
  对调整后的图像进行录像(编码录制)。
  对照片和录像进行回看(图片浏览器、视频播放器)
  长时间运行稳定。

Demo

  
  
  
  
  
  
  

体验下载地址

  CSDN:https://download.csdn.net/download/qq21497936/12827160
  QQ群:1047134658(点击“文件”搜索“camera”,群内与博文同步更新)

原理

  使用ffmpeg处理摄像头、使用OpenCV处理录像和播放;

v1.5.0功能

  • 打开摄像头,兼容多种摄像头,摄像头分辨率切换(摄像头管理)。
  • 对图像进行翻转、旋转、亮度调整(图像基本算法管理)
  • 对调整后的图像进行拍照、延时拍照。
  • 对调整后的图像进行录像(编码录制)。
  • 对照片和录像进行回看(图片浏览器、视频播放器)

Demo核心代码

FfmpegCameraManager.h:摄像头管理类

#ifndef FFMPEGCAMERAMANAGER_H
#define FFMPEGCAMERAMANAGER_H/************************************************************\* 控件名称: FfmpegCameraManager, ffmpeg管理类(用于摄像头操作)* 控件描述:*          1.打开摄像头*          2.支持动态切换分辨率* 作者:红模仿    联系方式:QQ21497936* 博客地址:https://blog.csdn.net/qq21497936*       日期                版本               描述*    2018年09年14日     v1.0.0         ffmpeg模块封装空类*    2020年09年05日     v1.1.0         ffmpeg打开摄像头,支持的动态分辨率切换*    2020年09年08日     v1.2.0         兼容各种摄像头,解决内存溢出bug,对最高帧率做了支持范围内的限制*                                     限制帧率一般为25fps(除非最大小于25fps或者最小大于25fps)
\************************************************************/#include <QObject>
#include <QString>
#include <QDebug>
#include <QTimer>
#include <QThread>
#include <QImage>
#include <QProcess>
#include <QMessageBox>
#include <QDateTime>extern "C" {#include "libavcodec/avcodec.h"#include "libavformat/avformat.h"#include "libswscale/swscale.h"#include "libavdevice/avdevice.h"#include "libavformat/version.h"#include "libavutil/time.h"#include "libavutil/mathematics.h"#include "libavformat/avformat.h"#include "libswscale/swscale.h"#include "libswresample/swresample.h"#include "errno.h"#include "error.h"
}#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("hh:mm:ss:zzz")class FfmpegCameraManager : public QObject
{Q_OBJECT
public:public:explicit FfmpegCameraManager(QObject *parent = nullptr);signals:void signal_captureOneFrame(QImage image);public:static QString getAvcodecConfiguration();public:bool init();bool openUsbCamera();QString getUsbCameraName();QList<QString> getUsbCameraInfo();int getCurrentFps();int getCurrentSizeFpsIndex();QList<QSize> getListSize() const;public slots:void slot_start();void slot_stop();void slot_setSizeFps(int index);protected slots:void slot_captureOneFrame();signals:public slots:private:static bool _init;AVFormatContext *_pAVFormatContext;         // 全局上下文AVInputFormat *_pAVInputFormat;AVDictionary* _pAVDictionary;               // 打开编码器的配置AVCodecContext *_pAVCodecContextForAudio;   // 音频解码器上下文AVCodecContext *_pAVCodecContextForVideo;   // 视频解码器上下文(不带音频)AVCodec * _pAVCodecForAudio;                // 音频解码器AVCodec * _pAVCodecForVideo;                // 视频解码器(不带音频)int _streamIndexForAudio;                   // 音频流序号int _streamIndexForVideo;                   // 视频流序号SwrContext *_pSwrContextForAudio;           // 音频转换上下文bool _running;bool _first;bool _opened;uint8_t *_pOutBuffer;AVFrame * _pFrame;AVFrame * _pFrameRGB;AVPacket *_pAVPacket;SwsContext *_pSwsContext;int _videoIndex;QString _cameraDescription;QList<QSize> _listSize;QList<int> _listFps;QList<QString> _listSizeFpsInfo;int _currentSizeFpsIndex;
};#endif // FfmpegCameraManager_H

OpenCVManager.h:录像与播放视频类

#ifndef OPENCVMANAGER_H
#define OPENCVMANAGER_H/************************************************************\* 控件名称: OpenCVManager,OpenCV管理类* 控件描述:*          1.OpenCV操作支持*          2.支持录像(.avi格式)* 作者:红模仿    联系方式:QQ21497936* 博客地址:https://blog.csdn.net/qq21497936*       日期             版本               描述*   2019年11月09日      v1.0.0   opencv拍照和录像Demo*   2020年09月07日      v1.1.0   增加了单纯录像的接口
\************************************************************/#include <QObject>
#include <QImage>
#include <QDateTime>
#include <QTimer>
// opencv
#include "opencv/highgui.h"
#include "opencv/cxcore.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"class OpenCVManager : public QObject
{Q_OBJECT
public:explicit OpenCVManager(QObject *parent = nullptr);~OpenCVManager();public:QString getWindowTitle() const;double getBrightness();double getContrast() const;double getSaturation() const;double getHue() const;double getGain() const;bool getShowProperty() const;double getExposure() const;int getRotate() const;bool getMirror() const;public:void setBrightness(double value);void setContrast(double value);void setSaturation(double value);void setHue(double value);void setGain(double value);void setShowProperty(bool value);void setExposure(double value);void setRotate(int rotate);void setMirror(bool mirror);signals:void signal_captureOneFrame(cv::Mat mat);   // 接收图像后抛出信号public:bool startCapture(int usb, int width = 1280, int height = 720);// 打开摄像头, 0...bool startCapture(QString url, int width = 1280, int height = 720);// 打开摄像头, 网络摄像头地址bool stopCapture();                 // 关闭摄像头void startRecord(QString filePath); // 开始录像(使用的是opencv打开的摄像头)void stopRecord();                  // 停止录像(使用的是opencv打开的摄像头)public slots:void slot_inputRecordImage(QImage image);void slot_stopRecordFormOut();public:     // 单独的一块业务,使用的是开始录像后,从类外面输入QImage进行录像void startRecordFromOut(QString filePath, int fps);void inputRecordImage(QImage image);void stopRecordFormOut();public slots:bool start();                       // 开启线程bool stop();                        // 关闭线程protected slots:void slot_captrueFrame();           // 消息循环获取图像void slot_stopCapture();            // 当正在采集中时(>>时),关闭摄像头会导致程序崩溃,所以采集与停止放一个线程中(消息循环)protected slots:void slot_startRecord(QString filePath);        // 录像(使用的是opencv打开的摄像头)void slot_stopRecord();                         // 停止录屏(使用的是opencv打开的摄像头)public:static QImage cvMat2QImage(const cv::Mat &mat);static cv::Mat image2Mat(QImage image);    // Qimage 转 cv::Matstatic QImage mat2Image(cv::Mat mat);      // cv::Mat 转 QImageprivate:cv::VideoCapture *_pVideoCapture;   // 摄像头实例cv::VideoWriter *_pVideoWrite;      // 录像实例QString _recordFilePath;            // 录制文件路径bool _running;                      // 线程是否运行bool _showProperty;                 // 是否显示属性参数double _brightness;                 // 亮度double _contrast;                   // 对比度double _saturation;                 // 饱和度double _hue;                        // 色调double _gain;                       // 增益double _exposure;                   // 曝光度int _width;                         // 宽度int _height;                        // 高度bool _recording;                    // 标志是否正在录像bool _startRecording;int _rotate;                        // 旋转度数bool _mirror;                       // 是否翻转int _fps;                           // 帧率int _index;                         // 帧序号private:cv::VideoWriter *_pVideoWriteForOut; // 录像实例(从外部输入图像,非从opencv打开摄像头)QString _recordFilePathForOut;       // 录像文件路径(从外部输入图像,非从opencv打开摄像头)private:QString _windowTitle;};#endif // OPENCVMANAGER_H

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108489004

案例分享:Qt内窥镜相机录像程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)相关推荐

  1. 强大的装逼,表白,炫富,恶搞短视频制作神器微信小程序源码支持多种流量主

    大家好给大家带来一款强大的微信小程序源码 该源码是属于制作短视频类型的 支持一键制作成各种短视频,比如装逼,表白,炫富,恶搞-..等等 里面拥有各种各样的模板,和抖音一键制作视频一个道理 另外里面小编 ...

  2. AI智能配音助手微信小程序源码支持多种声音场景选择

    大家好今天给大家带来一款配音小程序 这款小程序支持多种不同声音和场景的选择更人性化 比如说支持各地区的方言,英文,童声呀等等 另外也支持男声女声的选择,反正就是模板那些非常的多 当然啦音量,语调,语速 ...

  3. 小程序源码:AI智能配音助手微信小程序源码支持多种声音场景选择

    大家好今天给大家带来一款配音小程序 这款小程序支持多种不同声音和场景的选择更人性化 比如说支持各地区的方言,英文,童声呀等等 另外也支持男声女声的选择,反正就是模板那些非常的多 当然啦音量,语调,语速 ...

  4. 全球手机验证码发放+短视频去水印等组合微信小程序源码支持多种流量主

    这是一款特别的小程序,验证码功能可能大家都还没见过吧! 支持全球验证码发放,支持激励视频查看更多手机号码 另外还有短视频平台去水印解析功能 和抠图功能,快速抠掉背景图等功能组合而成 另外改小程序还支持 ...

  5. 超强大的头像制作神器,支持外卖CPS等优惠劵CPS微信小程序源码支持多种流量主模式

    这是一款目前小编见到的强大头像制作小程序 拥有丰富的模板,多种分类基本大全 支持直接获取微信头像,或者直接上传图片 另外上传的话还可以支持对图片修改剪辑等多功能 另外带外卖CPS,打车CPS,餐饮CP ...

  6. 王者荣耀出装与铭文推荐助手微信小程序源码支持多种流量主

    这是一款王者荣耀助手的一款小程序源码 该小程序主要功能就是提供各个英雄出装和铭文查询 功能虽然单调但是对于玩王者的朋友来说还是挺实用的! 目前该小程序源码已支持多种流量主模式 小程序源码下载地址: C ...

  7. 2022机器配音小程序源码+支持多种机器语音

    正文: 程序支持用户管理和配音员的添加和修改,设置推荐,设置配音员的试听文字,程序在本文最底部. 首页支持轮播图滚动,体验的小程序上暂时没有放出来,海报支持导到其他的小程序,打开h5页面,banner ...

  8. uni-app - 头像图片裁剪组件(支持多种裁剪,手势控制旋转或缩放、内外部控制图片移动、提供上传后端接口方案、头像图片美化)全端完美兼容 H5 App 小程序,最好用的图片上传后裁剪插件教程源代码

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,而且很难. 实现了 完美兼容 H5 App 小程序,选取手机本地相册或拍照,图片上传裁切内置多种方案,样式随便改, 本文代码干 ...

  9. 炫酷恶趣强大的制作神器小程序源码/支持多种流量主模式

    ☑️ 编号:ym393 ☑️ 品牌:无 ☑️ 语言:小程序 ☑️ 大小:539KB ☑️ 类型:炫酷恶趣神器 ☑️ 支持:微信小程序

最新文章

  1. 线段树练习 3P3372 【模板】线段树 1
  2. 转:安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
  3. 【图像超分辨率】Image Super-Resolution by Neural Texture Transfer
  4. 算法设计与分析——分支限界法——n皇后问题
  5. 和vs版本关系_教学鉴定贴:如何判断是不是VS厂的沛纳海手表
  6. 我的世界java占用太多内存_Java 进程占用内存过多,幕后元凶原来是线程太多
  7. ubuntu 16.04 安装 google浏览器
  8. 叶氏量能大抄底(通达信副图)
  9. Vue三大核心概念之二(事件)
  10. k8s api文档 调用heapster metrics
  11. 碳中和数据集 1991-2020全球中国省级地级市县级市区各行业碳中和二氧化碳排放量碳封存 能源消费能源消耗能源结构数据大全
  12. 虚拟基础架构管理——直接通过 VMware vCenter 管理 NetApp 存储操作
  13. StarRocks 极客营 | 王天宜:把 Usability 当产品来开发,愿运维把 StarRocks 用得飘逸
  14. 淘宝直播2020年GMV4000亿,直播电商第一梯队出位还是出局?
  15. GPU呈现模式分析中颜色的意义
  16. SAP中“管理/寄售移动被无值记账”提示问题分析处理实例
  17. 7的倍数和末尾含7的数
  18. 美国数字资产行业的合规之路 | TokenInsight
  19. 按钮自动发光用html怎么弄,HTML+CSS+JS发光开关按钮
  20. 一些电子图书的下载地址

热门文章

  1. 二本毕业9面字节虐成渣,测试菜鸟玩命复盘2月,怒斩腾讯、阿里两大offer
  2. 【Mysql学习日记2——修改】
  3. android remoteView
  4. 和腾讯工作十几年的资深测试工程师讨论今年校招标准。
  5. 嗨,你的$90000
  6. Python数据分析实战(2)使用Pandas进行数据分析
  7. c语言通讯录设计与实现需求概述,个人通讯录的设计与实现.doc
  8. Ethereum EVM简介
  9. Android monkey 基础入门介绍
  10. asdfasdfsaxcvxcv