opencv能打开海康威视ip网络摄像机网络摄像机吗

opencv资料(32)
Ubuntu(2)
经过很多天的配置,终于能在工程中调用海康威视的网络摄像头了,为了后人能快速上手,我整理内容如下:
在本文中我的电脑是使用的Ubuntu16.04 64位,使用工具是QT5.7.1,opencv2.4.9.
一、根据电脑的型号下载海康威视的SDK包
我的笔记本时linux64位的,所以下载的 ————设备网络SDK_Linux64
二、 用下面的方法之一配置SDK
如果HCNetSDKCom目录以及libhcnetsdk.so、libhpr.so、libHCCore文件和可执行文件在同一级目录下,则使用同级目录下的库文件;
如果不在同一级目录下,则需要将以上文件的目录加载到动态库搜索路径中,设置的方式有以下几种:
1.&& &将网络SDK各动态库路径加入到LD_LIBRARY_PATH环境变量
&& &1.在终端输入:export& LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/HCNetSDKCom&&&&& 只在当前终端起作用
&& &2. 修改~/.bashrc或~/.bash_profile,最后一行添加 export& LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/HCNetSDKCom,保存之后,使用source& .bashrc执行该文件 ,当前用户生效
&& &3. 修改/etc/profile,添加内容如第2条,同样保存之后使用source执行该文件& 所有用户生效
2.在/etc/ld.so.conf文件结尾添加网络sdk库的路径,如/XXX和/XXX/HCNetSDKCom/,保存之后,然后执行ldconfig。
三. 在Ubuntu16.04 的qt中新建一个工程
1.& 在工程的 ×.pro文件中添加以下内容:
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_calib3d.so\
/usr/local/lib/libopencv_ml.so.2.4.9\
/usr/local/lib/libopencv_calib3d.so.2.4 \
/usr/local/lib/libopencv_nonfree.so\
/usr/local/lib/libopencv_calib3d.so.2.4.9
/usr/local/lib/libopencv_nonfree.so.2.4\
/usr/local/lib/libopencv_contrib.so
/usr/local/lib/libopencv_nonfree.so.2.4.9\
/usr/local/lib/libopencv_contrib.so.2.4
/usr/local/lib/libopencv_objdetect.so\
/usr/local/lib/libopencv_contrib.so.2.4.9 \
/usr/local/lib/libopencv_objdetect.so.2.4\
/usr/local/lib/libopencv_core.so\
/usr/local/lib/libopencv_objdetect.so.2.4.9\
/usr/local/lib/libopencv_core.so.2.4 \
/usr/local/lib/libopencv_ocl.so\
/usr/local/lib/libopencv_core.so.2.4.9 \
/usr/local/lib/libopencv_ocl.so.2.4\
/usr/local/lib/libopencv_features2d.so \
/usr/local/lib/libopencv_ocl.so.2.4.9\
/usr/local/lib/libopencv_features2d.so.2.4
/usr/local/lib/libopencv_photo.so\
/usr/local/lib/libopencv_features2d.so.2.4.9 \
/usr/local/lib/libopencv_photo.so.2.4\
/usr/local/lib/libopencv_flann.so
/usr/local/lib/libopencv_photo.so.2.4.9\
/usr/local/lib/libopencv_flann.so.2.4
/usr/local/lib/libopencv_stitching.so\
/usr/local/lib/libopencv_flann.so.2.4.9
/usr/local/lib/libopencv_stitching.so.2.4\
/usr/local/lib/libopencv_gpu.so
/usr/local/lib/libopencv_stitching.so.2.4.9\
/usr/local/lib/libopencv_gpu.so.2.4
/usr/local/lib/libopencv_superres.so\
/usr/local/lib/libopencv_gpu.so.2.4.9 \
/usr/local/lib/libopencv_superres.so.2.4\
/usr/local/lib/libopencv_highgui.so
/usr/local/lib/libopencv_superres.so.2.4.9\
/usr/local/lib/libopencv_highgui.so.2.4
/usr/local/lib/libopencv_highgui.so.2.4.9 \
/usr/local/lib/libopencv_video.so\
/usr/local/lib/libopencv_imgproc.so
/usr/local/lib/libopencv_video.so.2.4\
/usr/local/lib/libopencv_imgproc.so.2.4 \
/usr/local/lib/libopencv_video.so.2.4.9\
/usr/local/lib/libopencv_imgproc.so.2.4.9\
/usr/local/lib/libopencv_videostab.so\
/usr/local/lib/libopencv_legacy.so \
/usr/local/lib/libopencv_videostab.so.2.4\
/usr/local/lib/libopencv_legacy.so.2.4
/usr/local/lib/libopencv_videostab.so.2.4.9\
/usr/local/lib/libopencv_legacy.so.2.4.9
/usr/local/lib/libopencv_ml.so
INCLUDEPATH += /home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/incCn
LIBS += /home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libhcnetsdk.so\
/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libHCCore.so\
/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libhpr.so\
/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libPlayCtrl.so\
/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libSuperRender.so\
/home/ding/opencv_projects/CH_HCNetSDK_V5.2.7.4_build_Linux64/lib/libAudioRender.so2. 在main.cpp函数中添加以下内容:
#include &opencv2/opencv.hpp&
#include &QDir&
#include &fstream&
#include &unistd.h&
//#include &auto_entercs.h&
#include &HCNetSDK.h&
#include &PlayM4.h&
#include &LinuxPlayM4.h&
#define HPR_ERROR
#define HPR_OK
#define USECOLOR
static cv::M
HWND h = NULL;
LONG nPort=-1;
LONG lUserID;
pthread_mutex_
std::list&cv::Mat& g_frameL
FILE *g_pFile = NULL;
void CALLBACK PsDataCallBack(LONG lRealHandle, DWORD dwDataType,BYTE *pPacketBuffer,DWORD nPacketSize, void* pUser)
if (dwDataType
== NET_DVR_SYSHEAD)
//写入头数据
g_pFile = fopen(&/home/lds/source/ps.dat&, &wb&);
if (g_pFile == NULL)
printf(&CreateFileHead fail\n&);
//写入头数据
fwrite(pPacketBuffer, sizeof(unsigned char), nPacketSize, g_pFile);
printf(&write head len=%d\n&, nPacketSize);
if(g_pFile != NULL)
fwrite(pPacketBuffer, sizeof(unsigned char), nPacketSize, g_pFile);
printf(&write data len=%d\n&, nPacketSize);
//void CALLBACK DecCBFun(LONG nPort, char *pBuf, LONG nSize, FRAME_INFO *pFrameInfo, LONG nReserved1, LONG nReserved2)
void CALLBACK DecCBFun(LONG nPort, char *pBuf, LONG nSize, FRAME_INFO *pFrameInfo, void* nReserved1, LONG nReserved2)
long lFrameType = pFrameInfo-&nT
if (lFrameType == T_YV12)
//cv::Mat dst(pFrameInfo-&nHeight, pFrameInfo-&nWidth,
// 8UC3表示8bit uchar无符号类型,3通道值
dst.create(pFrameInfo-&nHeight, pFrameInfo-&nWidth,
cv::Mat src(pFrameInfo-&nHeight + pFrameInfo-&nHeight / 2, pFrameInfo-&nWidth, CV_8UC1, (uchar *)pBuf);
cv::cvtColor(src, dst, CV_YUV2BGR_YV12);
pthread_mutex_lock(&mutex);
g_frameList.push_back(dst);
pthread_mutex_unlock(&mutex);
usleep(1000);
//cv::Mat src(pFrameInfo-&nHeight + pFrameInfo-&nHeight / 2, pFrameInfo-&nWidth, CV_8UC1, (uchar *)pBuf);
//cv::cvtColor(src, dst, CV_YUV2BGR_YV12);
//cv::imshow(&bgr&, dst);
//pthread_mutex_lock(&mutex);
//g_frameList.push_back(dst);
//pthread_mutex_unlock(&mutex);
//cv::waitKey(10);
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize,void* dwUser)
if (dwDataType == 1)
PlayM4_GetPort(&nPort);
PlayM4_SetStreamOpenMode(nPort, STREAME_REALTIME);
PlayM4_OpenStream(nPort, pBuffer, dwBufSize, 1024 * 1024);
PlayM4_SetDecCallBackEx(nPort, DecCBFun, NULL, NULL);
PlayM4_Play(nPort, h);
BOOL inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
switch (dwDataType)
case NET_DVR_SYSHEAD:
if (!PlayM4_GetPort(&nPort))
//获取播放库未使用的通道号
if (dwBufSize & 0) {
if (!PlayM4_SetStreamOpenMode(nPort, STREAME_REALTIME)) {
dRet = PlayM4_GetLastError(nPort);
if (!PlayM4_OpenStream(nPort, pBuffer, dwBufSize, 1024 * 1024)) {
dRet = PlayM4_GetLastError(nPort);
//设置解码回调函数 只解码不显示
if (!PlayM4_SetDecCallBack(nPort, DecCBFun)) {
dRet = PlayM4_GetLastError(nPort);
//设置解码回调函数 解码且显示
if (!PlayM4_SetDecCallBackEx(nPort, DecCBFun, NULL, NULL))
dRet = PlayM4_GetLastError(nPort);
//打开视频解码
if (!PlayM4_Play(nPort, h))
dRet = PlayM4_GetLastError(nPort);
//打开音频解码, 需要码流是复合流
if (!PlayM4_PlaySound(nPort)) {
dRet = PlayM4_GetLastError(nPort);
//usleep(500);
case NET_DVR_STREAMDATA:
//码流数据
if (dwBufSize & 0 && nPort != -1) {
BOOL inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
while (!inData) {
sleep(100);
inData = PlayM4_InputData(nPort, pBuffer, dwBufSize);
std::cerr && &PlayM4_InputData failed \n& && std::
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
char tempbuf[256] = {0};
std::cout && &EXCEPTION_RECONNECT = & && EXCEPTION_RECONNECT && std::
switch(dwType)
case EXCEPTION_RECONNECT: //预览时重连
printf(&pyd----------reconnect--------%d\n&, time(NULL));
void *RunIPCameraInfo(void *)
= &192.168.**.***&;
//海康威视网络摄像头的ip
char UName[] = &****&;
//海康威视网络摄像头的用户名
char PSW[]
= &*****&;
//海康威视网络摄像头的密码
NET_DVR_Init();
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(1000, true);
NET_DVR_SetLogToFile(3, &./sdkLog&);
NET_DVR_DEVICEINFO_V30 struDeviceInfo = {0};
NET_DVR_SetRecvTimeOut(5000);
lUserID = NET_DVR_Login_V30(IP, 8000, UName, PSW, &struDeviceInfo);
NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL);
long lRealPlayH
NET_DVR_CLIENTINFO ClientInfo = {0};
ClientInfo.lChannel
ClientInfo.lLinkMode
ClientInfo.hPlayWnd
ClientInfo.sMultiCastIP = NULL;
//lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, PsDataCallBack, NULL, 0);
lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, g_RealDataCallBack_V30, NULL, 0);
//NET_DVR_SaveRealData(lRealPlayHandle, &/home/lds/source/yuntai.mp4&);
if (lRealPlayHandle & 0)
printf(&pyd1---NET_DVR_RealPlay_V30 error\n&);
sleep(-1);
NET_DVR_Cleanup();
int main(int argc, char *argv[])
pthread_mutex_init(&mutex, NULL);
ret = pthread_create(&getframe, NULL, RunIPCameraInfo, NULL);
if(ret!=0)
printf(&Create pthread error!\n&);
pthread_mutex_lock(&mutex);
if(g_frameList.size())
std::list&cv::Mat&::
it = g_frameList.end();
image = (*(it));
if (!image.empty())
imshow(&frame from camera&,image);
cv::waitKey(1);
g_frameList.pop_front();
g_frameList.clear(); // 丢掉旧的帧
pthread_mutex_unlock(&mutex);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:131582次
积分:2530
积分:2530
排名:第15428名
原创:112篇
转载:28篇
评论:34条
(3)(5)(2)(5)(2)(2)(5)(6)(7)(4)(6)(3)(3)(8)(9)(31)(34)(8)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3aeb479d562b43f5-ua98).
重新安装浏览器,或使用别的浏览器OpenCV+海康威视摄像头的实时读取
OpenCV+海康威视摄像头的实时读取
PC:i7-4970 16GB内存
摄像头型号:DS-2CD3310D-I(2 8mm)
windows-x64、vs2012、opencv2 4 8、hkvision5114-x64版本库
OpenCV+海康威视摄像头的实时读取
PC:i7-4970 16GB内存
摄像头型号:DS-2CD3310D-I(2.8mm)
windows-x64、vs2012、opencv2.4.8、hkvision5114-x64版本库
保证使用SADP工具可以识别摄像头,然后配置IP与电脑在同一个网段。
再保证可以从浏览器中访问。账号密码默认的一般是admin、a(老版本的摄像头密码是12345)。
登录成功后可能要求下载WebComponent控件,下载好了安装便是。如果仍然出现如下画面:
则换一种浏览器试。一般是默认浏览器没问题的。
配置使用sdk中自带的ClientDemo.exe工具可以访问
配置sdk开发环境
– opencv的配置
这里不展开讲opencv的配置,仅说明需要配置Z喎"/kf/ware/vc/" target="_blank" class="keylink">vcGVuY3a7t76zseTBv6GiyejWw7rDttTTprXEdnO/qreiu7e+s7XEyvTQ1MXk1sMgPGJyPgo8aW1nIHNyYz0="/uploadfile/Collfiles/16.jpg" alt="这里写图片描述" title="\">
– 海康威视sdk属性配置
因为是64位环境,为了增强属性配置的内聚性,单独添加新项目属性表,设置海康威视sdk的属性
依赖库写全,为:
HCNetSDK.PlayCtrl.ws2_32.winmm.GdiPlus.IPHlpApi.L%(AdditionalDependencies)
代码及说明
/*#include "PlayM4.h"*/
#include "global.h"
#include "readCamera.h"
#define USECOLOR 1
//--------------------------------------------
int iPicNum=0;//Set channel NO.
LONG nPort=-1;
HWND hWnd=NULL;
void yv12toYUV(char *outYuv, char *inYv12, int width, int height,int widthStep)
unsigned int Y,U,V;
//printf("widthStep=%d.\n",widthStep);
for (row=0; row< row++)
idx=row * widthS
int rowptr=row*
for (col=0; col>1;
tmp = (row/2)*(width/2)+(col/2);
if((row==1)&&( col>=1400 &&col (1200 * widthStep))
//printf("row * widthStep=%d,idx+col*3+2=%d.\n",1200 * widthStep,idx+col*3+2);
outYuv[idx+col*3]
outYuv[idx+col*3+1] = U;
outYuv[idx+col*3+2] = V;
//printf("col=%d,row=%d.\n",col,row);
//解码回调 视频为YUV数据(YV12),音频为PCM数据
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
long lFrameType = pFrameInfo->nT
if(lFrameType ==T_YV12)
#if USECOLOR
//int start = clock();
static IplImage* pImgYCrCb = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);//得到图像的Y分量
yv12toYUV(pImgYCrCb->imageData, pBuf, pFrameInfo->nWidth,pFrameInfo->nHeight,pImgYCrCb->widthStep);//得到全部RGB图像
static IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);
cvCvtColor(pImgYCrCb,pImg,CV_YCrCb2RGB);
//int end = clock();
static IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 1);
memcpy(pImg->imageData,pBuf,pFrameInfo->nWidth*pFrameInfo->nHeight);
//printf("%d\n",end-start);
Mat frametemp(pImg),
//frametemp.copyTo(frame);
cvShowImage("IPCamera",pImg);
cvWaitKey(1);
EnterCriticalSection(&g_cs_frameList);
g_frameList.push_back(frametemp);
LeaveCriticalSection(&g_cs_frameList);
#if USECOLOR
cvReleaseImage(&pImgYCrCb);
cvReleaseImage(&pImg);
/*cvReleaseImage(&pImg);*/
//此时是YV12格式的视频数据,保存在pBuf中,可以fwrite(pBuf,nSize,1,Videofile);
//fwrite(pBuf,nSize,1,fp);
/***************
else if (lFrameType ==T_AUDIO16)
//此时是音频数据,数据保存在pBuf中,可以fwrite(pBuf,nSize,1,Audiofile);
*******************/
///实时流回调
void CALLBACK fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser)
switch (dwDataType)
case NET_DVR_SYSHEAD:
if (!PlayM4_GetPort(&nPort)) //获取播放库未使用的通道号
if(dwBufSize > 0)
if (!PlayM4_OpenStream(nPort,pBuffer,dwBufSize,))
dRet=PlayM4_GetLastError(nPort);
//设置解码回调函数 只解码不显示
if (!PlayM4_SetDecCallBack(nPort,DecCBFun))
dRet=PlayM4_GetLastError(nPort);
//设置解码回调函数 解码且显示
//if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
dRet=PlayM4_GetLastError(nPort);
//打开视频解码
if (!PlayM4_Play(nPort,hWnd))
dRet=PlayM4_GetLastError(nPort);
//打开音频解码, 需要码流是复合流
if (!PlayM4_PlaySound(nPort))
dRet=PlayM4_GetLastError(nPort);
case NET_DVR_STREAMDATA:
//码流数据
if (dwBufSize > 0 && nPort != -1)
BOOL inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
while (!inData)
Sleep(10);
inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
OutputDebugString(L"PlayM4_InputData failed \n");
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
char tempbuf[256] = {0};
switch(dwType)
case EXCEPTION_RECONNECT:
//预览时重连
printf("----------reconnect--------%d\n", time(NULL));
unsigned readCamera(void *param)
//---------------------------------------
NET_DVR_Init();
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
//---------------------------------------
// 获取控制台窗口句柄
//HMODULE hKernel32 = GetModuleHandle((LPCWSTR)"kernel32");
//GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
//---------------------------------------
// 注册设备
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceI
lUserID = NET_DVR_Login_V30("192.168.2.64", 8000, "admin", "a", &struDeviceInfo);
if (lUserID < 0)
printf("Login error, %d\n", NET_DVR_GetLastError());
NET_DVR_Cleanup();
return -1;
//---------------------------------------
//设置异常消息回调函数
NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
//cvNamedWindow("IPCamera");
//---------------------------------------
//启动预览并设置回调数据流
NET_DVR_CLIENTINFO ClientI
ClientInfo.lChannel = 1;
//Channel number 设备通道号
ClientInfo.hPlayWnd = NULL;
//窗口为空,设备SDK不解码只取流
ClientInfo.lLinkMode = 0;
//Main Stream
ClientInfo.sMultiCastIP = NULL;
LONG lRealPlayH
lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID,&ClientInfo,fRealDataCallBack,NULL,TRUE);
if (lRealPlayHandle<0)
printf("NET_DVR_RealPlay_V30 failed! Error number: %d\n",NET_DVR_GetLastError());
//cvWaitKey(0);
Sleep(-1);
//fclose(fp);
//---------------------------------------
//关闭预览
if(!NET_DVR_StopRealPlay(lRealPlayHandle))
printf("NET_DVR_StopRealPlay error! Error number: %d\n",NET_DVR_GetLastError());
//注销用户
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
其中最终得到的帧保存在g_frameList.push_back(frametemp);中。前后设置了对应的锁,用来对该帧序列的读写进行保护。这一部分内容是要自己完成的。即定义变量:
CRITICAL_SECTION g_cs_frameL
std::listg_frameL
主函数中的调用代码,先建立线程,调用上述读摄像头的函数的回调,并把读到的帧序列保存在g_frameList中,然后再读取该序列,保存到Mat里即可:
int main()
unsigned threadID;
Mat frame1;
InitializeCriticalSection(&g_cs_frameList);
hThread = (HANDLE)_beginthreadex( NULL, 0, &readCamera, NULL, 0, &threadID );
EnterCriticalSection(&g_cs_frameList);
if(g_frameList.size())
it = g_frameList.end();
Mat dbgframe = (*(it));
//imshow("frame from camera",dbgframe);
//dbgframe.copyTo(frame1);
//dbgframe.release();
(*g_frameList.begin()).copyTo(frame[i]);
g_frameList.pop_front();
g_frameList.clear(); // 丢掉旧的帧
LeaveCriticalSection(&g_cs_frameList);OpenCV学习笔记(26)
海康威视的网络摄像头使用:&
开发工具:vs2013 C&#43;&#43; 海康SDK
下载海康威视SDK:网址:&
o 1:对照自己的开发平台可以下载设备网络SDK_Win32设备网络SDK_Win64,解压到本地文件下:&
o 2:VS配置&
o&配置。参考址&&
o 建议自己创建一个项目属性表这样方便使用&
o SDK库文件和头文件配置&
o 解压SDK可以得到头文件和库文件&
o 在VC&#43;&#43;目录中添加的头文件包含路径和SDK中的头文件(修改“头文件”为“include”)&
添加库文件:既要添加库文件lib也要把lib下的HCNetSDKCom文件包含进去&
再链接器——输入——添加依赖项,把opencv的lib和SDK中的lib添加进去(包含HCNetSDKCom的lib)&
opencv_ml249d.lib&
opencv_calib3d249d.lib&
opencv_contrib249d.lib&
opencv_core249d.lib&
opencv_features2d249d.lib&
opencv_flann249d.lib&
opencv_gpu249d.lib&
opencv_highgui249d.lib&
opencv_imgproc249d.lib&
opencv_legacy249d.lib&
opencv_objdetect249d.lib&
opencv_ts249d.lib&
opencv_video249d.lib&
opencv_nonfree249d.lib&
opencv_ocl249d.lib&
opencv_photo249d.lib&
opencv_stitching249d.lib&
opencv_superres249d.lib&
opencv_videostab249d.lib&
GdiPlus.lib&
HCCore.lib&
HCNetSDK.LIB&
PlayCtrl.lib&
HCAlarm.lib&
HCGeneralCfgMgr.lib&
HCPreview.lib&
配置完成后就可以添加CPP文件。
#include &cstdlib&
#include &cstring&
#include &iostream&
#include &Windows.h&
#include &HCNetSDK.h&
#include &plaympeg4.h&
#include &opencv2\opencv.hpp&
#include &time.h&
using namespace std;
using namespace
LONG nPort = -1;
volatile int gbHandling = 3;
void CALLBACK DecCBFun(long nPort, char * pBuf, long nSize, FRAME_INFO * pFrameInfo, long nReserved1, long nReserved2)
if (gbHandling)
gbHandling--;
long lFrameType = pFrameInfo-&nT
if (lFrameType == T_YV12)
Mat pImg(pFrameInfo-&nHeight, pFrameInfo-&nWidth, CV_8UC3);
Mat src(pFrameInfo-&nHeight + pFrameInfo-&nHeight / 2, pFrameInfo-&nWidth, CV_8UC1, pBuf);
cvtColor(src, pImg, CV_YUV2BGR_YV12);
imshow(&IPCamera&, pImg);
waitKey(1);
gbHandling = 3;
void CALLBACK fRealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser)
switch (dwDataType)
case NET_DVR_SYSHEAD:
if (!PlayM4_GetPort(&nPort))
if (dwBufSize & 0)
if (!PlayM4_SetStreamOpenMode(nPort, STREAME_REALTIME))
if (!PlayM4_OpenStream(nPort, pBuffer, dwBufSize, 10 * 1024 * 1024))
if (!PlayM4_Play(nPort, NULL))
if (!PlayM4_SetDecCallBack(nPort, DecCBFun))
case NET_DVR_STREAMDATA:
if (dwBufSize & 0 && nPort != -1)
if (!PlayM4_InputData(nPort, pBuffer, dwBufSize))
cout && &error& && PlayM4_GetLastError(nPort) &&
if (dwBufSize & 0 && nPort != -1)
if (!PlayM4_InputData(nPort, pBuffer, dwBufSize))
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
char tempbuf[256] = { 0 };
switch (dwType)
case EXCEPTION_RECONNECT:
printf(&----------reconnect--------%d\n&, time(NULL));
void main()
NET_DVR_Init();
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceI
lUserID = NET_DVR_Login_V30(&169.254.42.127&, 8000, &admin&, &keylab88&, &struDeviceInfo);
if (lUserID & 0)
printf(&Login error, %d\n&, NET_DVR_GetLastError());
NET_DVR_Cleanup();
NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL);
LONG lRealPlayH
cvNamedWindow(&Mywindow&, 0);
cvNamedWindow(&IPCamera&, 0);
h = (HWND)cvGetWindowHandle(&Mywindow&);
if (h == 0)
cout && &窗口创建失败& &&
NET_DVR_PREVIEWINFO struPlayInfo = { 0 };
struPlayInfo.hPlayWnd =
struPlayInfo.lChannel = 1;
struPlayInfo.dwStreamType = 0;
struPlayInfo.dwLinkMode = 0;
lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, fRealDataCallBack, NULL);
if (lRealPlayHandle & 0)
printf(&NET_DVR_RealPlay_V40 error\n&);
printf(&%d\n&, NET_DVR_GetLastError());
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
waitKey();
Sleep(-1);
NET_DVR_StopRealPlay(lRealPlayHandle);
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:68905次
积分:1057
积分:1057
排名:千里之外
原创:24篇
转载:65篇
(1)(6)(6)(7)(1)(3)(3)(3)(2)(1)(10)(1)(3)(1)(3)(2)(1)(5)(5)(15)(1)(1)(1)(1)(4)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 海康威视打开有红光吗 的文章

 

随机推荐