所使用海康威视摄像头IP摄像头型號:
海康威视摄像头IPIPCamera图像捕获方法有两种:
(2)捕获实时流将实时流解码成YV12,然后转换成RGB
所使用海康威视摄像头IP摄像头型号:
海康威视攝像头IPIPCamera图像捕获方法有两种:
(2)捕获实时流将实时流解码成YV12,然后转换成RGB
在这篇博文里我先介绍第一种方法。
第一种方法关键是調用NET_DVR_CaptureJPEGPicture_NEW这个函数。关于这个函数的参数可以在SDK中找到,我这里截个图以作说明
这个函数Ret是用于返回该图像大小的一个参数,但是该函数嘚这个参数大概是没有用引用或者指针的方式来传递参数导致返回值一直是我初始化的0,因此为后面的操作带来了些许的不便——不得鈈使用一个较大的内存来保存图像一定能存储的下
NET_DVR_CaptureJPEGPicture_NEW这个函数是将单帧数据捕获并保存成JPEG,存放在指定的内存空间中也就是内存里的JPEG。為了获得OpenCV能处理的IplImage图像必须在内存中进行解码。
该函数要求buf必须是数组或者是byte类型的vector. 因此需要对char * 类型的JPEG压缩图像进行存储格式转换
运荇这个代码当然OpenCV的配置不能少,HCNetSDK.h也必须包含进工程
在上一篇博文里,我介绍了第一种方法但是由于NET_DVR_CaptureJPEGPicture_NEW该函数执行需要较长时间,无法实時所以必须继续第二种方法。
在这篇博文里我将介绍第二种方法,将捕获到的海康威视摄像头IPIPCamera摄像头图像转成OpenCV能处理的IplImage图像
在实现唍里面的方法后,发现不能实时这个系统我是要做给给人看的,是需要实时演示的这样子肯定是不行的。纠结了好久!然后查看海康威视摄像头IP《设备网络SDK使用手册_V4.2》里面有一个预览模块示例程序,可惜我一直运行不了报出的错误是PROCGETCONSOLEWINDOW
实在是没辙了,打海康客服不過海康的客服我实在无语,北京的完全无法接通直接打杭州的,打了四五遍终于有个人接电话了对方不懂,然后说让个工程师回电话OK,终于回了他告诉我 这里是有例程的,有分功能示例!突然间有了希望了例程是VC6.0工程,改了一些地方后终于能运行了。于是将怹的MFC工程相关的代码抠出来,重组于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色喥空间这个过程是在信件的DecBFun回调函数()里面执行的。
终于能够实时捕获图像了而且转换成了OpenCV能够处理的图像格式。
在这个过程中搜叻很多资料但是没有一个地方能详细说明,不过最终还是把这个给解决了
附加说明:如果最后要做图像处理而不是像我这样只是将采集的图像显示出来,那么下面的语句是不需要的
后记:虽然这个功能实现了,但是与我的图像处理函数如何结合到一起我想到的是用鏈队列,双线程!
写这两篇博文的目的其实也是想让处于探索过程中的开发人员能少走些弯路,节省些时间衷心希望本文能够帮到你!
因为本人已经毕业,项目也早就已经结题了手头上不再具有可供调试的硬件设备,因此对于大家所碰到的问题我基本上也已经无法囙答了,非常抱歉!如果大家在开发海康威视摄像头IP摄像头的过程中遇到了什么问题可以去跟海康客服去沟通如果您所在地区的客服无法联系上的话,请直接联系杭州总部的客服
最后,对之前很长一段时间对大家所提出的问题一直置之不理再次表示道歉!谢谢大家的支歭!
在上一篇博文里我介绍了第一种方法,但是由于NET_DVR_CaptureJPEGPicture_NEW该函数执行需要较长时间无法实时,所以必须继续第二种方法
在这篇博文里,峩将介绍第二种方法将捕获到的海康威视摄像头IPIPCamera摄像头图像转成OpenCV能处理的IplImage图像。
在实现完里面的方法后发现不能实时,这个系统我是偠做给给人看的是需要实时演示的,这样子肯定是不行的纠结了好久!然后查看海康威视摄像头IP《设备网络SDK使用手册_V4.2》,里面有一个預览模块示例程序可惜我一直运行不了,报出的错误是PROCGETCONSOLEWINDOW
实在是没辙了打海康客服,不过海康的客服我实在无语北京的完全无法接通,直接打杭州的打了四五遍终于有个人接电话了,对方不懂然后说让个工程师回电话。OK终于回了。他告诉我 这里是有例程的有分功能示例!突然间有了希望了,例程是VC6.0工程改了一些地方后,终于能运行了于是,将他的MFC工程相关的代码抠出来重组。于是实现了捕获YV12格式的视频流的功能光有YV12还是不行的,需要将YV12转成YUV4:4:4的然后再将YUV色度空间转换成RGB色度空间,这个过程是在信件的DecBFun回调函数()里面執行的
终于能够实时捕获图像了,而且转换成了OpenCV能够处理的图像格式
在这个过程中搜了很多资料,但是没有一个地方能详细说明不過最终还是把这个给解决了。
附加说明:如果最后要做图像处理而不是像我这样只是将采集的图像显示出来那么下面的语句是不需要的。
后记:虽然这个功能实现了但是与我的图像处理函数如何结合到一起?我想到的是用链队列双线程。!
写这两篇博文的目的其实也昰想让处于探索过程中的开发人员能少走些弯路节省些时间,衷心希望本文能够帮到你!