volatile
int
gbHandling
=
3
;
void
CALLBACK
DecCBFun
(
long
nPort
,
char
*
pBuf
,
long
nSize
,
FRAME_INFO
*
pFrameInfo
,
long
nReserved1
,
long
nReserved2
)
if
(
gbHandling
)
gbHandling
--
;
return
;
long
lFrameType
=
pFrameInfo
-
>
nType
;
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
)
;
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
)
)
break
;
if
(
dwBufSize
>
0
)
if
(
!
PlayM4_SetStreamOpenMode
(
nPort
,
STREAME_REALTIME
)
)
break
;
if
(
!
PlayM4_OpenStream
(
nPort
,
pBuffer
,
dwBufSize
,
10
*
1024
*
1024
)
)
break
;
if
(
!
PlayM4_Play
(
nPort
,
NULL
)
)
break
;
if
(
!
PlayM4_SetDecCallBack
(
nPort
,
DecCBFun
)
)
break
;
break
;
case
NET_DVR_STREAMDATA
:
if
(
dwBufSize
>
0
&&
nPort
!=
-
1
)
if
(
!
PlayM4_InputData
(
nPort
,
pBuffer
,
dwBufSize
)
)
cout
<<
"error"
<<
PlayM4_GetLastError
(
nPort
)
<<
endl
;
break
;
break
;
default
:
if
(
dwBufSize
>
0
&&
nPort
!=
-
1
)
if
(
!
PlayM4_InputData
(
nPort
,
pBuffer
,
dwBufSize
)
)
break
;
break
;
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
)
)
;
break
;
default
:
break
;
DWORD
HexToDecMa
(
DWORD wHex
)
return
(
wHex
/
4096
)
*
1000
+
(
(
wHex
%
4096
)
/
256
)
*
100
+
(
(
wHex
%
256
)
/
16
)
*
10
+
(
wHex
%
16
)
;
void
OnLButtonUp
(
LONG lRealPlayHandle
)
NET_DVR_PTZControl
(
lRealPlayHandle
,
PAN_RIGHT
,
1
)
;
NET_DVR_PTZControl
(
lRealPlayHandle
,
PAN_LEFT
,
1
)
;
NET_DVR_PTZControl
(
lRealPlayHandle
,
TILT_UP
,
1
)
;
NET_DVR_PTZControl
(
lRealPlayHandle
,
TILT_DOWN
,
1
)
;
void
main
(
)
{
NET_DVR_Init
(
)
;
NET_DVR_SetConnectTime
(
2000
,
1
)
;
NET_DVR_SetReconnect
(
10000
,
true
)
;
LONG lUserID
;
NET_DVR_DEVICEINFO_V30 struDeviceInfo
;
lUserID
=
NET_DVR_Login_V30
(
"192.168.6.100"
,
8000
,
"admin"
,
"qwer1234"
,
&
struDeviceInfo
)
;
if
(
lUserID
<
0
)
printf
(
"Login error, %d\n"
,
NET_DVR_GetLastError
(
)
)
;
NET_DVR_Cleanup
(
)
;
return
;
NET_DVR_SetExceptionCallBack_V30
(
0
,
NULL
,
g_ExceptionCallBack
,
NULL
)
;
LONG lRealPlayHandle
;
cvNamedWindow
(
"Mywindow"
,
0
)
;
HWND h
=
(
HWND
)
cvGetWindowHandle
(
"Mywindow"
)
;
if
(
h
==
0
)
cout
<<
"窗口创建失败"
<<
endl
;
NET_DVR_PREVIEWINFO struPlayInfo
=
{
0
}
;
struPlayInfo
.
hPlayWnd
=
h
;
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
(
)
;
return
;
NET_DVR_PTZPOS m_ptzPosCurrent
;
DWORD dwtmp
;
while
(
1
)
OnLButtonUp
(
lRealPlayHandle
)
;
if
(
GetKeyState
(
VK_LEFT
)
<
0
)
NET_DVR_PTZControl
(
lRealPlayHandle
,
PAN_LEFT
,
0
)
;
if
(
GetKeyState
(
VK_UP
)
<
0
)
NET_DVR_PTZControl
(
lRealPlayHandle
,
TILT_UP
,
0
)
;
if
(
GetKeyState
(
VK_DOWN
)
<
0
)
NET_DVR_PTZControl
(
lRealPlayHandle
,
TILT_DOWN
,
0
)
;
if
(
GetKeyState
(
VK_RIGHT
)
<
0
)
NET_DVR_PTZControl
(
lRealPlayHandle
,
PAN_RIGHT
,
0
)
;
bool
a
=
NET_DVR_GetDVRConfig
(
0
,
NET_DVR_GET_PTZPOS
,
0
,
&
m_ptzPosCurrent
,
sizeof
(
NET_DVR_PTZPOS
)
,
&
dwtmp
)
;
int
m_iPara1
=
HexToDecMa
(
m_ptzPosCurrent
.
wPanPos
)
;
int
m_iPara2
=
HexToDecMa
(
m_ptzPosCurrent
.
wTiltPos
)
;
int
m_iPara3
=
HexToDecMa
(
m_ptzPosCurrent
.
wZoomPos
)
;
cout
<<
"P"
<<
m_iPara1
/
10
+
1
<<
endl
;
cout
<<
"T"
<<
m_iPara2
/
10
+
1
<<
endl
;
cout
<<
"Z"
<<
m_iPara3
/
10
<<
endl
;
waitKey
(
1
)
;
waitKey
(
)
;
Sleep
(
-
1
)
;
NET_DVR_StopRealPlay
(
lRealPlayHandle
)
;
NET_DVR_Logout
(
lUserID
)
;
NET_DVR_Cleanup
(
)
;
return
;
#include<cstdlib>#include<cstring>#include<iostream>#include<Windows.h>#include<HCNetSDK.h>#include <plaympeg4.h>#include <opencv2\opencv.hpp>#include ...
海康
SDK编程指南
目前使用的
海康
SDK包括IPC_SDK(硬件设备),Plat_SDK(平台),其中两套SDK都需单独调用
海康
播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息。本文仅对视频监控常用功能的使用进行说明,其它未实现功能请参看设备网络SDK使用手册和播放库编程指南V7.2。
IPC_SDK编程指南
(一) SDK的引用
由于IPC_SDK没有SDK安装程...
项目中经常需要使用
海康
的网络摄像头,做视频图像算法经常会用到rtsp流,但是rtsp一般很难保证实时性且解码效率不能保证.通过
海康
给的python的demo,对模块进行封装以方便python像调用
opencv
的VideoCaputure一样调用.目录结构如下
├── HKCam.py #自己写的封装
├── HCNetSDK.py # SDK给定
├── PlayCtrl.py #SDK给定
├── lib
│ ├── linux
│ │ ├── HCNetSDKCom
│ │ │...
/// 注册一个回调函数,获得当前表面的device context, 你可以在这个DC上画图(或写字),就好
/// 像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是DirectDraw里的
/// Off-Screen表面的DC。注意,如果是使用overlay表面,这个接口无效,你可以直接在窗口上绘图,只要不是透明色就不会被覆盖。
文章目录3D定位简述3D定位原理分析
海康
SDK实现ONVIF实现
球机
的
PTZ
与ONVIF的
PTZ
的对应关系
球机
的视场角与ONVIF的Zoom的对应关系3D 定位参考链接
海康
部分
球机
有3D定位功能,最近研究了一下
海康
球机
SDK实现和任意
球机
ONVIF实现。
3D定位是指通过设置图像目标坐标,旋转
球机
PTZ
,使目标在
球机
视野中心;
球机
坐标系有三个轴分别
控制
pan(水平) tilt(垂直) zoom(倍率);
3D定位原理分析
3D定位原理见下图(C是镜头中心,O是图像中心点
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schem
海康
威视摄像头是一款高品质、先进的监控摄像头,它具有可靠性、可控性和可扩展性,以及强大的智能化功能。
其中,
海康
摄像头的web
云台
控制
功能是其独特的特点之一。这个功能可以实现对摄像头的本地和远程
控制
,用户可以通过
云台
控制
画面的旋转、变焦、变焦和对焦,以获得更清晰的图像和更全面的监控。
使用
海康
摄像头的web
云台
控制
功能,需要先在摄像头进行配置,然后使用支持web浏览器的设备打开
海康
摄像头的web页面,登录后即可进行
云台
控制
。用户可以使用方向键来
控制
云台
的移动方向,也可以使用数字键来
控制
变焦和对焦等操作。
此外,
海康
摄像头的web
云台
控制
功能还支持多画面预览,用户可以在同一个页面上对多个摄像头进行实时预览,并可以对其中任意一个摄像头进行
云台
控制
。
总之,
海康
威视摄像头的web
云台
控制
功能是其高品质、智能化的监控系统中不可或缺的一部分,为用户提供了更加全面、可控、易用的监控体验。