#include <iostream>
#include <dhconfigsdk.h>
#include <dhnetsdk.h>
#include <dhplay.h>
#include <Cv310Text.h>
#define PLAYPORT 0
#define IMAGE_HEIGHT 720
#define IMAGE_WIDTH 1280
#define OSD_MAX_ROW 10
#define OSD_MAX_STR 80
HANDLE mutex;
typedef struct OSDfont{
int fontSize;
int rowStart;
int rowWidth;
int colStart;
int colWidth;
int fontSpace;
int color_r;
int color_g;
int color_b;
}OSDFONT;
OSDFONT osdfont{30, 1, 60, 1, 20, 1, 255, 255, 255};
Cv310Text* osdText;
char osdRow[OSD_MAX_ROW];
char osdStr[OSD_MAX_ROW][OSD_MAX_STR];
void __stdcall DisConnectFunc(LLONG lLoginID, char* pchDVRIP, LONG nDVRPort, LDWORD dwUser)
{
//disconnect...
}
void __stdcall HaveReConnect(LLONG lLoginID, char* pchDVRIP, LONG nDVRPort, LDWORD dwUser)
{
//reconnect...
}
void CALLBACK RealDataCB(
LLONG lRealHandle,
DWORD dwDataType,
BYTE *pBuffer,
DWORD dwBufSize,
LDWORD dwUser)
{
if (0 == dwDataType && dwBufSize > 0)
{
PLAY_InputData(PLAYPORT, pBuffer, dwBufSize);
}
}
void CALLBACK DecCBFun(LONG nPort, char * pBuf, LONG nSize, FRAME_INFO * pFrameInfo, void* pUserData, LONG nReserved2)
{
if (pFrameInfo->nType == T_IYUV){
cv::Mat yuv(IMAGE_HEIGHT + IMAGE_HEIGHT / 2, IMAGE_WIDTH, CV_8UC1, pBuf); //图片的宽高要与视频分辨率对应
cv::Mat bgr;
WaitForSingleObject(mutex, INFINITE);
cv::cvtColor(yuv, bgr, CV_YUV2RGB_YV12);
for (int i = 0; i < OSD_MAX_ROW; i++){ //通过Cv310Text进行叠加
if (1 == osdRow[i])
osdText->putText(bgr, osdStr[i], cv::Point((osdfont.colStart + 2) * osdfont.colWidth, (osdfont.rowStart + i) * osdfont.rowWidth), cv::Scalar(osdfont.color_b, osdfont.color_g, osdfont.color_r));
}
//cv::imshow("video", bgr);
//cv::waitKey(1);
ReleaseMutex(mutex);
}
}
int main()
{
osdText = new Cv310Text("字体.ttf");
CvScalar size;
size.val[0] = osdfont.fontSize;
size.val[1] = 0.5;
size.val[2] = osdfont.fontSpace * 1.0 / 10;
float p = 1.0;
osdText->setFont(NULL, &size, NULL, &p);
for(int i = 0; i < OSD_MAX_ROW; i++){
osdRow[i] = 1;
strncpy(osdStr, "叠加测试ABCDE12345", OSD_MAX_STR);
}
const char* ip = "192.168.1.108";
int port = 37777;
const char* user = "admin";
const char* passwd = "admin";
PLAY_OpenStream(PLAYPORT, NULL, 0,100 * 1024);
PLAY_SetDecCallBack(PLAYPORT, DecCBFun);
PLAY_Play(PLAYPORT, NULL);
CLIENT_Init(DisConnectFunc, 0);
CLIENT_SetAutoReconnect(&HaveReConnect, 0);
NET_PARAM stuNetParam = { 0 };
stuNetParam.nConnectTime = 3000;
CLIENT_SetNetworkParam(&stuNetParam);
NET_DEVICEINFO_Ex stuDevInfoEx = { 0 };
int nError = 0;
LONG hLogin = CLIENT_LoginEx2(ip, port, user, passwd, EM_LOGIN_SPEC_CAP_TCP, NULL, &stuDevInfoEx, &nError);
if (hLogin == 0)
{
std::cout << "CLIENT_LoginEx2 GetLastError: " << CLIENT_GetLastError() << std::endl;
return 1;
}
LONG hPlay = CLIENT_RealPlay(hLogin, 0, NULL);
if (0 == hPlay){
std::cout << "CLIENT_RealPlay GetLastError " << CLIENT_GetLastError() << std::endl;
CLIENT_Logout(hLogin);
CLIENT_Cleanup();
return 1;
}
if (FALSE == CLIENT_SetRealDataCallBack(hPlay, RealDataCB, NULL)){
std::cout << "CLIENT_SetRealDataCallBack GetLastError " << CLIENT_GetLastError() << std::endl;
CLIENT_StopRealPlay(hPlay);
CLIENT_Logout(hLogin);
CLIENT_Cleanup();
return 1;
}
Sleep(60 * 1000);
CLIENT_Logout(hLogin);
CLIENT_StopRealPlay(hPlay);
CLIENT_Cleanup();
PLAY_Stop(PLAYPORT);
PLAY_CloseStream(PLAYPORT);
return 0;
}
参考链接: https://www.cnblogs.com/dwdxdy/p/3713990.html
相关推荐
FlightStream实战:如何用面元法在笔记本电脑上完成无人机气动分析(附NASA案例)
本文详细介绍了如何利用FlightStream面元法在笔记本电脑上高效完成无人机气动分析,包括其核心技术优势、NASA D8案例实战解析及高效工作流建立。FlightStream作为快速CFD分析工具,显著提升了早期设计阶段的迭代速度,适用于概念设计验证和多气动构型比较。
openCV与freetype解决图片叠OSD的问题
注意:先解压freetype-2.10.2.tar.xz压缩包,解压完成后用解压出来的Makefile进行编译,这里我是用的新的编译链(包含zlib,如果不包含的话需要用下面的命令来编译安装zlib),编译出错是正常的,是因为freetype是依赖于libpng的,而libpng依赖于zlib。wchar_t是C/C++的字符类型,是一种扩展的存储方式。主要是CvxText.hpp和CvxText.cpp,2个文件中的putWChar函数实现了字体的位图绘制,中文变成图片,然后去叠到图片上去。
价值投资/指标选股(akshare)
利用akshare的数据源,可以获取所有的股票数据以及公开的财务数据,可以进行条件筛选,获取满足条件的股票。 这套模板可以用于价值投资,指标选股。选股周期为日线级别。然后结果可以邮箱发送。 import time import akshare as ak ## A 股上市公司的实时行情数据 stock_zh_a_spot_df = ak.stock_zh_a_spot() #print(stock_zh_a_spot_df) ##取前300测试 ##取前300测试 df_stock =...
C++ OSD水印叠加
视频相关领域(监控、LED大屏)很多场合可能会涉及到在一幅画面上进行文字或时间的叠加,常规做法都是在后端实现,即先渲染图像,然后叠加OSD文字信息,这种方法简单且高效。但是有些场合必须要求在前端进行叠加,比如监控领域中视频名称信息、时间信息等这些都需要在前端图像编码的时候就已经叠加到图像上,以防止用户修改和验伪。示例中采用jpeg图像作为底图,所以需要借助libjpeg将图像解码还原RGB原始图像数据,叠加OSD文字信息需借助freetype生成点阵RGB图像数据,然后对2个图像进行像素合并或重写。
5分钟搞定!用MCU GPIO实现零功耗一键开关机电路(附完整原理图)
本文详细介绍了如何利用MCU GPIO设计零功耗一键开关机电路,适用于便携式设备和电池供电项目。通过软硬件结合的方式,实现关机状态下的真正零功耗,同时提供智能开关机控制。文章包含完整原理图、元件选型指南和实际搭建技巧,帮助开发者在5分钟内完成高效电源管理方案。
Maven的下载安装配置教程(详细图文)
目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..
使用QT对接大华网络摄像头SDK的示例程序(建议收藏)
初始化 大华网络摄像头的默认 IP 地址都是 192.168.1.108,首先将你的电脑和摄像头连接到同一个路由器下,假如你的路由器不是1网段,则对路由器进行设置。 然后在 IE 浏览器下输入192.168.1.108,并参考说明书对摄像头进行配置,用户名,密码等。 SDK库文件添加 到大华官网下载最新的 SDK 开发包, 下载地址:大华设备网络SDK 或者从这儿下载:https://download.youkuaiyun.com/download/u012534831/12567061 下载后解压出库文件和头文件
手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略
本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888等图像色彩编码格式区别
YV12的数据接口,主要是用于第三方的设备对接居多,这个接口的u_stride, v_stride分别是(width+1)/2,如果出来的数据需要旋转,通过rotation_degree来控制旋转角度即可。NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888都是常见的图像颜色编码格式,它们之间的主要区别在于色彩空间和数据排列方式。这个接口也是主要用于特定的数据类型对接,NV21的数据,直接转I420后,对接即可,接口参数比较简单,不再赘述。RGBA的主要用于屏幕共享场景下。
STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成
STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成。
RK3568平台开发系列讲解(音频篇)配置声卡
📢本篇文章介绍如何配置声卡。
大华sdk使用问题
这是十年前的问题了,大华sdk使用的时候存在速度控制,逆向播放,退出缓慢,定位控制,停止播放画面停留等问题
基于CANopen协议,实现机器人500-1000Hz高频控制(附实操实例) (1)
基于CANopen协议实现机器人500-1000Hz高频控制,核心不是“协议本身的性能极限”,而是“通过优化配置、硬件适配、软件调优,最大化发挥协议的实时性优势”。关键在于:以PDO为核心实现实时数据传输,以SYNC帧锁定高频同步周期,以精简冗余、优化硬件降低总线负载,同时通过实操调试解决周期漂移、延迟、干扰等问题。
YUV数据上叠加中文字符
整体思路: 1.取yuv数据的y分量转化opencv中的Mat(C语言为 IplImage)数据 //叠加字符 if(imgUV == NULL) imgUV=cvCreateImage(cvSize(w,h),IPL_DEPTH_8U,1); memcpy(imgUV->imageData,pYUV,w*h); 2.使用GDI+将中文字符绘制为bmp位图与Ma...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
OpenCV中的RGB与YUV转换
对OpenCV中RGB与YUV转换所要注意的地方进行详细记录。
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
opencv-python(六):颜色空间及转换
0. 颜色模式 RGB 模式(百万种颜色) CMYK 模式(四种印刷色) 索引模式(256 种颜色) 灰度模式(256 级灰度) 位图模式(两种颜色) 0.1 灰度模式 也就是灰度图(黑白照片),每个像素只有明暗变化,用0~255共256个亮度级来表示,用8个bit来表示,所以每个像素信息用8bit储存. 0.2 位图模式(二值图像) 即只有纯黑和纯白两种亮度,没有渐变的亮度级,通常用0表示纯黑,1表示纯白,所以每个像素信息用1bit表示即可 0.3 RGB模式:基于发光体(电子产品)的色彩模式 即用
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号...
前言 本章将服务器端几个非主要但常用的功能分享一下。 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :) 系列 1. C# 视频监控系列(1):准备 2. C...
RGB&YUV图像视频格式
OpenCV中如果是单通道或者三通道一样的大的图像,直接使用copyTo()函数即可。对于yuv420的图像则不是适用。
常用图像像素格式 NV12、NV2、I420、YV12、YUYV
文章目录 常用图像像素格式 RGB 和 YUVRGB 格式YUV 格式YUV采样YUV存储格式常见的像素格式YUV422:YUYV、YVYU、UYVY、VYUYYUV420:I420、YV12、NV12,、NV21 常用图像像素格式 RGB 和 YUV 近期由于项目需要,开始接触图像像素格式,因此在这里做一个小结。 像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。RGB 和 YUV 为两种经常使用的像素格式。 RGB 格式 一般较为熟悉,RGB图像...
opencv将YV12转换为BGR图像
opencv的转换方法调用如下,但是要求输入的图像的长和宽一定要是偶数的,否则报错! bgr = cv2.cvtColor(Yv12, cv2.COLOR_YUV2BGR_YV12) 实验结果如下: img = cv2.imread(path) copy_img=img.copy() Y_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) Yv12 ...
YUV RGB 常见视频格式解析
come from :http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html I420是YUV格式的一种,而YUV有packed format和planar format两种,而I420属于planar format的一种。 同时I420表示了YUV的采样比例4:2:0。4:2:0的YUV并不是说没有V分量,而是指对于...
大华摄像头获取yuv数据
这里我把从大华公司获取的资料代码贴出来,希望对大家有所帮助。 // DecCallBack.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include "dhnetsdk.h" #include #include "dhplay.h
调取大华SDK获取IPC音视频流并得到H264帧
通过调取大华摄像机SDK,获取的音视频码流,其格式为大华的私有格式。需通过大华的码流分析库StreamAnalyzer.dll将私有头和负载分离,从而提取出纯H264及音频帧数据。 第1步:调用sdk获取实况码流 LLONG lRet = CLIENT_RealPlayEx(m_LoginID,iChannel,0); if(0 != lRet) { m_DispHanle[iDispNum-1]=lRet; SetPlayVideoInfo(iDispNum,iChannel,ServerMode);
使用大华NetSDK对接大华相机
使用大华NetSDK对接相机 一、 下载大华NetSDK https://www.dahuatech.com/service/downloadlists/836.html 根据自己的需要下载对应版本的sdk。这边我们就以Win32版本作为开发使用。 下载的文件解压后,内部文件如下图所示: 开发使用到的文件在库文件和头文件目录中。使用手册和演示程序则提供了快速上手使用的说明和实例; 二、 使用NetSDK对接大华设备 1、 基本概念 设备发现: 在局域网中寻找大华设备,找到所有接入.
260



被折叠的 条评论
为什么被折叠?



