QT叠加HDMI采集视频OSD

这篇博客介绍了如何利用pipivision HDMI采集卡进行视频预览,并通过提供的QT示例代码展示了如何实现时间、文字和图片的OSD叠加功能。该采集卡支持USB3.0接口,具备HDMI输入和环出,还具有混音功能,且适用于Windows/Linux跨平台,是开发者便捷的工具。
摘要由CSDN通过智能技术生成

因为项目需要,从某宝采购了一个pipivision HDMI采集卡,该采集卡为USB3.0接口,支持HDMI输入和环出,还有混音功能,以下是示例源码下载链接

github下载

网盘分享提取码n6sh

查看QT示例源码,在文件DevManager.h中包装了设备的很多操作,使用起来非常方便,我们只需要把源文件DevManager.cpp添加到工程并包含该头文件即可,内部的层次结构如下图所示。

查看对应的资料发现,可叠加的OSD包括时间、文字、图片、矩形、圆和直线等,而且支持位置动态修改,这样能呈现一些实时的效果。
OSD还能进行其他控制,比如使能、颜色、透明度、裁剪等等,使用方便而且还支持Windows/Linux跨平台,堪称码农利器。

要操作对应的设备,我们先在自定义的类里面声明一个对象:
CDevSDK dev;

然后在自定义类的构造函数初始化列表中初始化对象时打开第0个采集卡:
dev(0)

如果设备打开成功我们就启动该设备
if (dev) dev.DeviceStart();

接下来我们根据需要使用OSD叠加功能,示例代码如下:

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
    , dev(0) // open device 0
{
    ui->setupUi(this);

    if (dev)
    {
        dev.DeviceStart();
    }
}

// 时间OSD
void Dialog::on_timeosd_clicked(bool checked)
{
    if (dev)
    {
        /* %M month, %D month of day, %H 24 hours, %h 12 hours, %m minute, %s second, %Y year,
         * %t AM/PM, %N month name, %n month short name, %W week name, %w week short name, %% % */
        QString str("%Y-%M-%D %H:%m:%s");
        uvs_font_info_tX info;
        currentFont(info); // 字体
        dev.SetTimeOSD(timeindex, 20, 20, _string(str), info);
    }
}

// 文字OSD
void Dialog::on_textosd_clicked(bool checked)
{
    if (dev)
    {
        QString str("Text Sample");
        uvs_font_info_tX info;
        currentFont(info); // 字体
        dev.SetTextOSD(textindex, 20, 100, 0, 0, _string(str), info);
    }
}

// 图片OSD
void Dialog::on_imageosd_clicked(bool checked)
{
    if (dev)
    {
        QString str("image file path");
        dev.SetImageOSD(imageindex, 20, 160, 0, 0, 192, _string(str));
    }
}

Dialog::~Dialog()
{
    dev.DeviceClose();
    delete ui;
}

QT实现HDMI视频预览

QT是一套跨平台的C++开发框架,而FFmpeg则是一个开源的多媒体框架。使用QT和FFmpeg的组合可以实现采集摄像头视频的功能。 首先,需要在QT项目中引入FFmpeg库。可以通过CMake进行配置,或者直接在项目中添加相应的库文件和头文件。 然后,在QT的代码中,可以使用FFmpeg提供的API来进行摄像头视频采集。首先需要初始化FFmpeg库,然后打开摄像头设备,设置视频的参数(如分辨率、帧率等),并创建一个视频流。 接下来,可以使用QT提供的图像显示控件(如QLabel)来实时显示采集到的视频帧。通过FFmpeg提供的函数,可以从视频流中读取每一帧的数据,并将其转换为QT可以直接显示的图像格式(如QImage),然后将图像显示在界面上。 在接收到每一帧的图像后,可以进行一些处理,如图像加工、增加特效等。QT提供了丰富的图像处理功能,可以很方便地对图像进行各种操作。 最后,在退出程序时,需要释放FFmpeg相关的资源,关闭摄像头设备,清理内存。 总结起来,使用QT和FFmpeg可以很方便地实现采集摄像头视频的功能。通过FFmpeg提供的API,可以打开摄像头设备并获取视频流数据。然后将每一帧的图像数据转换为QT支持的图像格式,并在界面上实时显示。同时,QT提供了丰富的图像处理功能,可以对采集到的视频图像进行各种操作。最后,在程序退出时,需要释放FFmpeg的资源,关闭摄像头设备,以及清理内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值