1、捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二)
http://blog.csdn.net/wanghuiqi2008/article/details/31410509
2、opencv读取海康威视摄像头(可用)ipcamera
http://blog.csdn.net/shakevincent/article/details/51490197
3、SDK库文件和头文件配置
解压SDK可以得到头文件和库文件
在VC++目录中添加opencv的头文件包含路径和SDK中的头文件(修改“头文件”为“include”)
添加库文件:既要添加库文件lib也要把lib下的HCNetSDKCom文件包含进去
再链接器——输入——添加依赖项,把opencv的lib和SDK中的lib添加进去(包含HCNetSDKCom的lib)
Q1: HCNetSDK.h 中有个地方要加个空格
修改plaympeg4.h文件。在extern "C" __declspec(dllexport)
的"C"
和__
之间需要增加空格,否则会导致编译报错。
Q2: HCNetSDK/lib 包括 HCNetSDKCom 中的dll 复制到windows/system32
4、调用dll:
.h, .lib, .dll 的路径分别放在包含目录,库目录(以及链接器-输入),windows/system32
VS 2015 DLL的创建、静态调用和动态调用
VS 2013环境生成和调用DLL动态链接库
DWORD getFocusPos(NET_DVR_PREVIEWINFO struInfo) {
NET_DVR_FOCUSMODE_CFG *focusModeCfg = new NET_DVR_FOCUSMODE_CFG();//初始化PTZ基本参数结构体
LPVOID *ptr = new LPVOID();//接收数据的缓冲指针
//LPVOID ptr;
DWORD size = sizeof(focusModeCfg);//获取结构体空间大小
LPDWORD BytesReturned;// 实际收到的数据长度指针,不能为NULL
NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_FOCUSMODECFG, struInfo.lChannel, ptr, size, BytesReturned);//获取配置参数指针
focusModeCfg = (NET_DVR_FOCUSMODE_CFG *)ptr;
std::cout << "dwFocusPos:" << focusModeCfg->dwFocusPos << std::endl;
return focusModeCfg->dwFocusPos;
}
LPVOID *ptr = new LPVOID();
在堆上存储数据,适用于大容量的数据
LPVOID ptr;
在内存中开辟空间
存在一个很大的缺陷,即通过流媒体协议获得的码流没有办法满足实时要求,返回图像存在 3-5 秒延时,在实际项目中并不可行。另一方面,仅仅取得码流对于实际项目也并不足够,还需要想方设法对云台进行控制。
// 说明:
// username:用户名,例如admin
// passwd:密码,例如12345
// ip:设备的ip地址,例如192.0.0.64
// port:端口号默认554,若为默认可以不写
// codec:有h264、MPEG-4、mpeg4这几种
// channel:通道号,起始为1
// subtype:码流类型,主码流为main,子码流为sub
rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
cam = cv2.VideoCapture(“rtsp://admin:[email protected]:554/h264/ch1/sub/av_stream”)
linux下Python调用海康SDK实时显示网络摄像头
python3.7-config --cflags
# 输出结果:将-I后的路径添加到 Header Search Paths setting
-I/Users/wumanjia/anaconda3/include/python3.7m -I/Users/wumanjia/anaconda3/include/python3.7m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/wumanjia/anaconda3/include -arch x86_64 -I/Users/wumanjia/anaconda3/include -arch x86_64
python3.7-config --ldflags
# 输出结果:将-L后的路径打开,拖动文件libpython3.7.dylib至项目中
-L/Users/wumanjia/anaconda3/lib/python3.7/config-3.7m-darwin -lpython3.7m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation
linux下编译的库可以拿到mac下来用吗
HikVision SDK: C++ 至 Python
安装swig。并添加相应环境变量
下载opencv-swig。
将上述接口文件中 lib
文件夹的所有文件拷贝到项目所在目录,并与三个源文件放置在一起。(注:源文件包括HKIPcamera.cpp
、HKIPcamera.h
和HKIPcamera.i
)
通过命令行使用 swig
生成HKIPcamera_wrap.cxx
文件。cd到HKIPcamera.i源文件文件夹下,并修改 OpenCV
路径
swig -I"D:\Program Files\opencv3\opencv\build\include" -python -c++ HKIPCamera.i
// 头文件目录
D:\Boost\boost_1_68_0
// 库文件目录
D:\Boost\boost_1_68_0\libs
HKIPcamera.h
文件添加到头文件、HKIPcamera_wrap.cxx
和HKIPcamera.cpp
添加到源文件、HKIPcamera.i
添加到工程目录下.dll
文件改名为_HKIPcamera.pyd
,并与HKIPcamera.py
放置在同一文件目录下,即可在Python
中引用。Mat pImg(pFrameInfo->nHeight, pFrameInfo->nWidth, CV_8UC3);
Mat src(pFrameInfo->nHeight + pFrameInfo->nHeight / 2, pFrameInfo->nWidth, CV_8UC1, pBuf);
cv::cvtColor(src, pImg, CV_YUV2BGR_YV12);
//static Mat* 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);
测试 test.py
linux下Python调用海康SDK实时显示网络摄像头
生成的dll其实可以通用
Error: 在另外电脑上运行,报错dll load faild