捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二)

标签: 捕获图像海康威视IPCameraOpenCVIplImage
 15424人阅读 评论(54) 收藏 举报

海康威视IPCamera图像捕获

捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(一)

捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(二)

所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P)

海康威视IPCamera图像捕获方法有两种:

(1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行视频抓图

(2)捕获实时流,将实时流解码成YV12,然后转换成RGB

在上一篇博文里,我介绍了第一种方法,但是由于NET_DVR_CaptureJPEGPicture_NEW该函数执行需要较长时间,无法实时,所以必须继续第二种方法。

在这篇博文里,我将介绍第二种方法,将捕获到的海康威视IPCamera摄像头图像转成OpenCV能处理的IplImage图像。

在实现完捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(一)里面的方法后,发现不能实时,这个系统我是要做给给人看的,是需要实时演示的,这样子肯定是不行的。纠结了好久!然后查看海康威视《设备网络SDK使用手册_V4.2》,里面有一个预览模块示例程序,可惜我一直运行不了,报出的错误是PROCGETCONSOLEWINDOW GetConsoleWindow中的GetConsoleWindow被重定义,后来一直调试没调成功。

实在是没辙了,打海康客服,不过海康的客服我实在无语,北京的完全无法接通,直接打杭州的,打了四五遍终于有个人接电话了,对方不懂,然后说让个工程师回电话。OK,终于回了。他告诉我http://www.hikvision.com/cn/download_more_401.html 这里是有例程的,有分功能示例!突然间有了希望了,例程是VC6.0工程,改了一些地方后,终于能运行了。于是,将他的MFC工程相关的代码抠出来,重组。于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的,需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色度空间,这个过程是在信件的DecBFun回调函数(回调函数请看这里!)里面执行的。

不多说了,上代码!

[cpp] view plaincopy

print?在CODE上查看代码片派生到我的代码片

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include "Windows.h"
  5. #include "HCNetSDK.h"
  6. #include "PlayM4.h"
  7. #include <opencv2\opencv.hpp>
  8. #include "cv.h"
  9. #include "highgui.h"
  10. #include <time.h>
  11. #define USECOLOR 1
  12. usingnamespacestd;
  13. usingnamespacestd;
  14. //--------------------------------------------
  15. intiPicNum=0;//Set channel NO.
  16. LONGnPort=-1;
  17. HWNDhWnd=NULL;
  18. voidyv12toYUV(char*outYuv,char*inYv12,intwidth,intheight,intwidthStep)
  19. {
  20. intcol,row;
  21. unsigned intY,U,V;
  22. inttmp;
  23. intidx;
  24. //printf("widthStep=%d.\n",widthStep);
  25. for(row=0; row<height; row++)
  26. {
  27. idx=row * widthStep;
  28. introwptr=row*width;
  29. for(col=0; col<width; col++)
  30. {
  31. //int colhalf=col>>1;
  32. tmp = (row/2)*(width/2)+(col/2);
  33. //         if((row==1)&&( col>=1400 &&col<=1600))
  34. //         {
  35. //          printf("col=%d,row=%d,width=%d,tmp=%d.\n",col,row,width,tmp);
  36. //          printf("row*width+col=%d,width*height+width*height/4+tmp=%d,width*height+tmp=%d.\n",row*width+col,width*height+width*height/4+tmp,width*height+tmp);
  37. //         }
  38. Y=(unsigned int) inYv12[row*width+col];
  39. U=(unsigned int) inYv12[width*height+width*height/4+tmp];
  40. V=(unsigned int) inYv12[width*height+tmp];
  41. //         if ((col==200))
  42. //         {
  43. //         printf("col=%d,row=%d,width=%d,tmp=%d.\n",col,row,width,tmp);
  44. //         printf("width*height+width*height/4+tmp=%d.\n",width*height+width*height/4+tmp);
  45. //         return ;
  46. //         }
  47. if((idx+col*3+2)> (1200 * widthStep))
  48. {
  49. //printf("row * widthStep=%d,idx+col*3+2=%d.\n",1200 * widthStep,idx+col*3+2);
  50. }
  51. outYuv[idx+col*3]   = Y;
  52. outYuv[idx+col*3+1] = U;
  53. outYuv[idx+col*3+2] = V;
  54. }
  55. }
  56. //printf("col=%d,row=%d.\n",col,row);
  57. }
  58. //解码回调 视频为YUV数据(YV12),音频为PCM数据
  59. voidCALLBACK DecCBFun(longnPort,char* pBuf,longnSize,FRAME_INFO * pFrameInfo,longnReserved1,longnReserved2)
  60. {
  61. longlFrameType = pFrameInfo->nType;
  62. if(lFrameType ==T_YV12)
  63. {
  64. #if USECOLOR
  65. //int start = clock();
  66. IplImage* pImgYCrCb = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);//得到图像的Y分量
  67. yv12toYUV(pImgYCrCb->imageData, pBuf, pFrameInfo->nWidth,pFrameInfo->nHeight,pImgYCrCb->widthStep);//得到全部RGB图像
  68. IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);
  69. cvCvtColor(pImgYCrCb,pImg,CV_YCrCb2RGB);
  70. //int end = clock();
  71. #else
  72. IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 1);
  73. memcpy(pImg->imageData,pBuf,pFrameInfo->nWidth*pFrameInfo->nHeight);
  74. #endif
  75. //printf("%d\n",end-start);
  76. cvShowImage("IPCamera",pImg);
  77. cvWaitKey(1);
  78. #if USECOLOR
  79. cvReleaseImage(&pImgYCrCb);
  80. cvReleaseImage(&pImg);
  81. #else
  82. cvReleaseImage(&pImg);
  83. #endif
  84. //此时是YV12格式的视频数据,保存在pBuf中,可以fwrite(pBuf,nSize,1,Videofile);
  85. //fwrite(pBuf,nSize,1,fp);
  86. }
  87. /***************
  88. else if (lFrameType ==T_AUDIO16)
  89. {
  90. //此时是音频数据,数据保存在pBuf中,可以fwrite(pBuf,nSize,1,Audiofile);
  91. }
  92. else
  93. {
  94. }
  95. *******************/
  96. }
  97. ///实时流回调
  98. voidCALLBACK fRealDataCallBack(LONGlRealHandle,DWORDdwDataType,BYTE*pBuffer,DWORDdwBufSize,void*pUser)
  99. {
  100. DWORDdRet;
  101. switch(dwDataType)
  102. {
  103. caseNET_DVR_SYSHEAD://系统头
  104. if(!PlayM4_GetPort(&nPort))//获取播放库未使用的通道号
  105. {
  106. break;
  107. }
  108. if(dwBufSize > 0)
  109. {
  110. if(!PlayM4_OpenStream(nPort,pBuffer,dwBufSize,1024*1024))
  111. {
  112. dRet=PlayM4_GetLastError(nPort);
  113. break;
  114. }
  115. //设置解码回调函数 只解码不显示
  116. if(!PlayM4_SetDecCallBack(nPort,DecCBFun))
  117. {
  118. dRet=PlayM4_GetLastError(nPort);
  119. break;
  120. }
  121. //设置解码回调函数 解码且显示
  122. //if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
  123. //{
  124. //  dRet=PlayM4_GetLastError(nPort);
  125. //  break;
  126. //}
  127. //打开视频解码
  128. if(!PlayM4_Play(nPort,hWnd))
  129. {
  130. dRet=PlayM4_GetLastError(nPort);
  131. break;
  132. }
  133. //打开音频解码, 需要码流是复合流
  134. if(!PlayM4_PlaySound(nPort))
  135. {
  136. dRet=PlayM4_GetLastError(nPort);
  137. break;
  138. }
  139. }
  140. break;
  141. caseNET_DVR_STREAMDATA://码流数据
  142. if(dwBufSize > 0 && nPort != -1)
  143. {
  144. BOOLinData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
  145. while(!inData)
  146. {
  147. Sleep(10);
  148. inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
  149. OutputDebugString(L"PlayM4_InputData failed \n");
  150. }
  151. }
  152. break;
  153. }
  154. }
  155. voidCALLBACK g_ExceptionCallBack(DWORDdwType,LONGlUserID,LONGlHandle,void*pUser)
  156. {
  157. chartempbuf[256] = {0};
  158. switch(dwType)
  159. {
  160. caseEXCEPTION_RECONNECT://预览时重连
  161. printf("----------reconnect--------%d\n", time(NULL));
  162. break;
  163. default:
  164. break;
  165. }
  166. }
  167. voidmain() {
  168. //---------------------------------------
  169. // 初始化
  170. NET_DVR_Init();
  171. //设置连接时间与重连时间
  172. NET_DVR_SetConnectTime(2000, 1);
  173. NET_DVR_SetReconnect(10000, true);
  174. //---------------------------------------
  175. // 获取控制台窗口句柄
  176. //HMODULE hKernel32 = GetModuleHandle((LPCWSTR)"kernel32");
  177. //GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
  178. //---------------------------------------
  179. // 注册设备
  180. LONGlUserID;
  181. NET_DVR_DEVICEINFO_V30 struDeviceInfo;
  182. lUserID = NET_DVR_Login_V30("10.102.7.88", 8000,"admin","12345", &struDeviceInfo);
  183. if(lUserID < 0)
  184. {
  185. printf("Login error, %d\n", NET_DVR_GetLastError());
  186. NET_DVR_Cleanup();
  187. return;
  188. }
  189. //---------------------------------------
  190. //设置异常消息回调函数
  191. NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
  192. //cvNamedWindow("IPCamera");
  193. //---------------------------------------
  194. //启动预览并设置回调数据流
  195. NET_DVR_CLIENTINFO ClientInfo;
  196. ClientInfo.lChannel = 1;        //Channel number 设备通道号
  197. ClientInfo.hPlayWnd = NULL;     //窗口为空,设备SDK不解码只取流
  198. ClientInfo.lLinkMode = 0;       //Main Stream
  199. ClientInfo.sMultiCastIP = NULL;
  200. LONGlRealPlayHandle;
  201. lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID,&ClientInfo,fRealDataCallBack,NULL,TRUE);
  202. if(lRealPlayHandle<0)
  203. {
  204. printf("NET_DVR_RealPlay_V30 failed! Error number: %d\n",NET_DVR_GetLastError());
  205. return;
  206. }
  207. //cvWaitKey(0);
  208. Sleep(-1);
  209. //fclose(fp);
  210. //---------------------------------------
  211. //关闭预览
  212. if(!NET_DVR_StopRealPlay(lRealPlayHandle))
  213. {
  214. printf("NET_DVR_StopRealPlay error! Error number: %d\n",NET_DVR_GetLastError());
  215. return;
  216. }
  217. //注销用户
  218. NET_DVR_Logout(lUserID);
  219. NET_DVR_Cleanup();
  220. return;
  221. }

终于能够实时捕获图像了,而且转换成了OpenCV能够处理的图像格式。

在这个过程中搜了很多资料,但是没有一个地方能详细说明,不过最终还是把这个给解决了。

附加说明:如果最后要做图像处理而不是像我这样只是将采集的图像显示出来,那么下面的语句是不需要的。

  1. #if USECOLOR
  2. cvReleaseImage(&pImgYCrCb);
  3. cvReleaseImage(&pImg);
  4. #else
  5. cvReleaseImage(&pImg);
  6. #endif

后记:虽然这个功能实现了,但是与我的图像处理函数如何结合到一起?我想到的是用链队列,双线程。链队列代码请看这里!

写这两篇博文的目的其实也是想让处于探索过程中的开发人员能少走些弯路,节省些时间,衷心希望本文能够帮到你!


因为本人已经毕业,项目也早就已经结题了,手头上不再具有可供调试的硬件设备,因此对于大家所碰到的问题,我基本上也已经无法回答了,非常抱歉!如果大家在开发海康威视摄像头的过程中遇到了什么问题可以去跟海康客服去沟通,如果您所在地区的客服无法联系上的话,请直接联系杭州总部的客服。

最后,对之前很长一段时间对大家所提出的问题一直置之不理再次表示道歉!谢谢大家的支持!

**************************************************************************************

转载请注明出处:http://blog.csdn.net/wanghuiqi2008/article/details/31410509

**************************************************************************************

25
0
猜你在找

Python编程基础视频教程(第五季)
Python编程基础视频教程(第七季)
Swift视频教程(第三季)
C++语言基础
Cocos2d-Lua手游开发基础篇

OpenCV中读取RGB格式图像转成HSV格式图像显示
海康威视采集卡结合opencv使用两种方法
opencv读取海康威视摄像头
OpenCV+海康威视摄像头的实时读取
海康威视API-单帧数据捕获并保存成JPEG图片NET_DVR_CaptureJPEGPicture
id="iframeu1607657_0" src="http://pos.baidu.com/scqm?rdid=1607657&dc=2&di=u1607657&dri=0&dis=0&dai=1&ps=8761x361&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1477751311208&ti=%E6%8D%95%E8%8E%B7%E6%B5%B7%E5%BA%B7%E5%A8%81%E8%A7%86IPCamera%E5%9B%BE%E5%83%8F%EF%BC%8C%E8%BD%AC%E6%88%90OpenCV%E5%8F%AF%E4%BB%A5%E5%A4%84%E7%90%86%E7%9A%84%E5%9B%BE%E5%83%8F%EF%BC%88%E4%BA%8C%EF%BC%89%20-%20%E9%9B%AA%E6%B0%B4%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET&ari=2&dbv=2&drs=1&pcs=1498x618&pss=1499x8780&cfv=0&cpl=45&chi=1&cce=true&cec=UTF-8&tlm=1477751311&rw=618&ltu=http%3A%2F%2Fblog.csdn.net%2Fwanghuiqi2008%2Farticle%2Fdetails%2F31410509&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D332DJISDRtqcRYm4hJQ12oUI85XAzvyRlYvwLdFInpApMIyfkzCUaPjtUW-sHSePezi2Fv9HNKXsrzSl8ClvMd8NpxV1eRhifuxdsPPysnu%26wd%3D%26eqid%3Df1d003ec00028201000000045814b21a&ecd=1&psr=1366x768&par=1366x706&pis=-1x-1&ccd=24&cja=true&cmi=158&col=zh-CN&cdo=-1&tcn=1477751311&qn=ef8ad61fca55e13e&tt=1477751310992.222.228.231" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
查看评论
28楼 LHY_045 2016-05-22 21:37发表 [回复]
我有一个问题,我认为队列种的图像处理的速度比摄像头写入的速度慢,因为如果作人脸识别或者是行人识别那么处理速度会很慢,写入的速度快的话会造成队列的长度越来越大,这个问题怎么解决???
27楼 qq_32414847 2016-03-12 15:39发表 [回复]
如果不用Opencv处理,用C++实现,请问大概流程?
26楼 竹斋 2016-03-11 00:12发表 [回复]
调取解码之后,不知道怎么调用做接下来的图像处理啊,麻烦大神给我指点一下啊,万分感谢!
25楼 wangfei198857 2016-01-06 13:55发表 [回复]
楼主你好!请问你的代码运行在什么环境?
我的在VC6.0 + opencv1.0下报错
error C2664: 'OutputDebugStringA' : cannot convert parameter 1 from 'unsigned short [26]' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

请问楼主的#include <opencv2\opencv.hpp>是opencv2版本的吗?

24楼 qq_33021543 2015-12-22 14:46发表 [回复]
楼主,我在控制台运行时,运行一段时间,就会出现error happened,输出错误是PlayM4_InputData failed.您知道这是因为什么吗?请您有时间回复一下,或者qq1498177249,谢谢了
23楼 fangice66 2015-10-22 17:19发表 [回复]
楼主,想问下一直提示playM4_InputData failed怎么解决呀

Re: invadertroy 2015-11-27 10:19发表 [回复]
回复fangice66:之前这个问题你解决了吗?想请教你一下
22楼 dimaliu 2015-09-15 11:25发表 [回复]
把上面的代码贴上去之后,回调函数进去了,但是播放器回调进不去。控件不显示视频,opencv也不显示。不知道为什么,哪位能帮我解决下该问题

Re: invadertroy 2015-11-26 16:46发表 [回复]
回复dimaliu:你好,回调函数进不去的问题你解决了吗?我最近用这个也是碰到这个问题!
21楼 止的不是战 2015-09-10 21:11发表 [回复]
博主,为什么在运行了这个程序后,出现了一个窗口,不显示视频,然后很快就自动退出了?

Re: a496817765 2015-09-11 09:22发表 [回复]
回复止的不是战:有可能你摄像头IP设置错误了,我也有遇到这个情况

Re: 止的不是战 2015-09-12 12:34发表 [回复]
回复a496817765:IP地址已经改了,还是这样。496817765是你扣扣吗?能交流一下吗?
20楼 a496817765 2015-09-10 16:37发表 [回复]
博主,你的程序我调试通过可以运行起来,但是运行一段时间后直接会在console中提示error happened.
然后在输出调试中提示PlayM4_InputData failed 
这个是什么问题导致的?内存溢出吗?

Re: a496817765 2015-09-17 14:27发表 [回复]
回复a496817765:询问了海康的技术人员,还有查看了相关的SDK文档,在实时解码回调方法中进行长时间操作会导致解码回调方法阻塞,这里是将获取的数据取到回调方法外部进行处理。

Re: qq_33021543 2015-12-22 14:41发表 [回复]
回复a496817765:请问针对这个问题您是怎么解决的,真的很需要您的帮助,谢谢了,请您有空回复我一下,或者我的qq1498177249,谢谢了
19楼 li367383592 2015-08-18 17:22发表 [回复]
您好,我用您的程序运行后,能注册,但运行后显示NET_DVR_RealPlay_V30 failed! Error number:107,是什么原因呢?

Re: a496817765 2015-09-10 15:58发表 [回复]
回复li367383592:询问过海康那边,错误代码107是因为SDK库文件导入不全。
18楼 不要做程序员的小松鼠 2015-08-13 09:18发表 [回复]
不知道楼主还记得不,海康给的例子是不是有内存泄漏?

Re: 雪水 2015-08-15 13:20发表 [回复]
回复不要做程序员的小松鼠:当时我也没有仔细研究他们给的例程,只是根据他们的例程将整个流程打通了。
17楼 shhdgl 2015-04-18 15:33发表 [回复]
很不错,学习了,但是用主码流我的延时很大,差不多有40~50s的样子,这个跟电脑的配置很有关系的吧?

Re: hnu2016 2016-05-26 07:14发表 [回复]
回复shhdgl:这个主要是上面的yv12toYUV函数与cvtColor这两个函数造成的,所以延时很大,特别是在用主流时,传回来的图像特别的大,处理起来很麻烦
16楼 zhaozhaoni 2015-03-24 10:11发表 [回复]
楼主你好!感谢分享!!
我用这段程序运行看不到视频,只卡在黑色DOS界面上,感觉在不停取帧,但是没有显示,是怎么回事?
PS:我用的是openCV 1.0 ,跟这个有关吗?
15楼 kwanqueen 2015-02-02 17:22发表 [回复]
感谢博主分享,但是我的有个问题,视频很卡,什么原因?
14楼 leifeng_soul 2015-01-30 13:52发表 [回复]
正好在用海康像机进行二次开发,需要用到这个,收藏之,多谢楼主分享,有问题再咨询
13楼 kwanqueen 2015-01-29 16:58发表 [回复]
无法打开包括文件:“PlayM4.h”,我也是下载的这个版本的SDK,求解决

Re: shhdgl 2015-04-18 15:14发表 [回复]
回复kwanqueen:这个应该是海康的库更新了,现在变成了plaympeg4.h
12楼 hxx_Helen 2015-01-22 10:32发表 [回复]
博主你好,我用了你的程序得到的lRealPlayHandle是小于0的,控制台上输出的是“NET_DVR_RealPlay_V30 failed! Error number:84”,请问是什么原因呢?

Re: 雪水 2015-01-24 16:04发表 [回复]
回复hxx_Helen:84号错误对应的错误解释:加载标准协议通讯库StreamTransClient失败。我感觉是你IP没配好吧。你用海康威视自带的软件能否看到摄像头视频,如果可以看到再用这段代码。
11楼 sufangqi123 2014-12-30 19:22发表 [回复]
我现在是想实时处理视频并显示人脸检测结果,但是加上人脸检测结果后根本无法实时显示,请问楼主做过实时处理实时显示的程序没?

Re: 雪水 2014-12-30 19:56发表 [回复]
回复sufangqi123:我做的就是实时处理实时显示。显示的时候有几秒钟的绝对延时,但是确实是实时显示的。
你的实时处理速度是否能跟得上采集速度,如果处理速度很慢,那么处理后在显示出来,那当然显示的不是实时的。
10楼 plhrbust 2014-12-29 15:45发表 [回复]
非常感谢 很实用 谢谢啦大牛 32个赞
9楼 lonerzf 2014-12-07 15:41发表 [回复]
楼主,我弄出来以后发现图像大约会延时10S的样子,请问您有出现这个问题吗?

Re: 雪水 2014-12-12 20:12发表 [回复]
回复lonerzf:会有一定延时,但我的延时在5S以内的样子。
8楼 河海壹粟 2014-11-25 21:59发表 [回复]
大神,我想请教你一个问题,我现在又两个海康威视的网络摄像机,请问怎么同时获取两路视频流呢?
弄两个回调函数?分别处理视频流? 博主能给个交流qq吗?谢谢了

Re: 雪水 2014-12-07 00:26发表 [回复]
回复河海壹粟:我觉得开两个线程就可以了。输入不同的配置参数。
7楼 lvl000 2014-09-29 09:42发表 [回复]
楼主转换格式后,出现卡顿现象了吗?如何解决的?

Re: qq_22338395 2015-11-17 23:12发表 [回复]
回复lvl000:请问您卡顿问题有没有解决
Re: 雪水 2014-09-29 19:51发表 [回复]
回复lvl000:卡顿是不是因为计算机CPU处理能力不够,导致卡顿的?
用这种方法没有出现卡顿现象的。
6楼 此生-未名 2014-09-23 12:51发表 [回复]
楼主好,请问您说的“是有例程的,有分功能示例” ,分功能示例是在哪

Re: 雪水 2014-09-29 19:52发表 [回复]
回复此生-未名:看橘黄色字体,这些都是超链接的。里面有。
5楼 ProMonkeySun 2014-09-16 20:31发表 [回复]
楼主的代码很好的实现了格式的转换,我现在又遇到一个问题,我在使用两个摄像机读入两路视频,将两个摄像机读入的视频图像都实现上面的格式转换,转成opencv能处理的图像,此时在使用回调函数时,无法区分两个摄像机各自的图像,也就是无法将两路视频分别显示在两个cvNamedWindow中,这个问题有什么解决方法吗,感谢楼主!!

Re: 雪水 2014-10-03 21:20发表 [回复]
回复ProMonkeySun:建议你用两个线程去处理。或者在回调函数的参数里加上一个标志位,显示的时候判断一下标志位。
4楼 lvl000 2014-09-15 17:47发表 [回复]
博主如何确定已经捕获到视频流的?

Re: 雪水 2014-09-15 22:53发表 [回复]
回复lvl000:imshow可以看得到视频的

Re: hnu2016 2016-05-26 07:17发表 [回复]
回复雪水:请问楼主,取流回来后进行播放,不存在很大的延迟吗,就是视频变得一卡一卡的
Re: lvl000 2014-09-16 10:22发表 [回复]
回复雪水:或者博主能告诉海康demo中那个“实时流回调解码获取YUV”仅仅是获取视频流数据什么都不作为还是说捕获后,存放于某个文件中

Re: 雪水 2014-09-16 22:07发表 [回复]
回复lvl000:获取到YUV后暂时是存在内存里面的,没有做任何用途。要做什么事情,你得自己去定义
Re: lvl000 2014-09-16 09:56发表 [回复]
回复雪水:我的看不到视频是怎么回事?我先是改海康给的demo里的分功能显示,没出现视频,然后又copy你这个程序也没显示
3楼 whj919 2014-08-20 11:13发表 [回复]
谢谢楼主的分享,我这里也是实时性满足不了,节省了我不少时间。
2楼 peterpan_cafuc 2014-06-23 11:09发表 [回复]
我目前要做的一个程序,需求正好和楼主一样。
楼主这篇博文很有用,感谢分享!
1楼 titer1 2014-06-18 14:55发表 [回复]

很不错,关于raw图像的处理

捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二)相关推荐

  1. 捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(二)

    海康威视IPCamera图像捕获 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图像(一) 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图 ...

  2. 捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(一)

    海康威视IPCamera图像捕获 捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(一) 捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图 ...

  3. 图像修复 python_Python OpenCV|cv2.inpaint()函数,图像修复

    概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...

  4. 海康威视IPCamera图像捕获 二种方法

    所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P) 海康威视IPCamera图像捕获方法有两种: (1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行 ...

  5. java识别图片中的图形形状_基于Java+OpenCV技术对几何图像颜色与形状识别

    基于 Java+OpenCV 技术对几何图像颜色与形状识别 杨思阳 黄军 吴春秋 (黔东南民族职业技术学院,贵州 凯里 556000) [摘 要] 通过 Java 调用 OpenCV 视觉库实现几何图 ...

  6. 2.ROS机器视觉——ROS图像(imgmsg)与opencv(cv2)对接

    参考:古月学院和ROS机器人开发实践 目标:实现ROS系统读取摄像头的图像,ROS读取的图像数据转化为opencv中的图像,opencv对接受的图像进行处理,最后返回给ROS系统可视化输出. 安装op ...

  7. OpenCV透视变换应用于图像的实例(附完整代码)

    OpenCV透视变换应用于图像的实例 OpenCV透视变换应用于图像的实例 OpenCV透视变换应用于图像的实例 #include "opencv2/imgproc.hpp" #i ...

  8. OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔

    OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 目录 OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 1. 图像梯度 1.1 Sobel和Schar ...

  9. python图像条状状噪声_一起学opencv-python十(给图像加噪声,模糊处理和图像锐化)...

    参考了https://www.bilibili.com/video/av24998616/?p=9 https://www.bilibili.com/video/av24998616/?p=10和 h ...

最新文章

  1. 周志华等人新著!国内第一部AI本科专业教育培养体系出炉
  2. 交换二维数组元素c语言,二维数组中元素替换问题!
  3. 【jetson nano】ubuntu- python-ssh远程控制jetson nano与单片机串口通信
  4. ❤️拿到offer的成长之路与经验感悟分享❤️
  5. 开始使用Spring Cloud实战微服务
  6. Kernel Memory Layout on ARM Linux
  7. 如何把服务器系统克隆出来,一次Win2003服务器下的完全克隆 -电脑资料
  8. Android 驱动(10)----设备树(二)linux内核顶层am335x-evm.dts
  9. Hdu-1358Period(KMP算法之next数组的应用)
  10. 街头霸王全人物故事背景
  11. windows配置指定网段流量走虚拟专用网络
  12. 怎样让照片变得更清晰,这几个方法真的好用!
  13. rust怎么拆除墙壁指令_腐蚀RUST指令大全
  14. 西门子840Dsl系统的刀具列表数据采集
  15. 关于JSON.stringify()的用法
  16. 个人写的JSP个人日记本分享学习经验
  17. 吴裕雄--天生自然 诗经:所见
  18. PSNR峰值信噪比matlab实现
  19. python批量处理视频教程_如何用python批量调整视频声音
  20. Dozer 时间转换问题

热门文章

  1. Spring Bean 生命周期之“我从哪里来”?懂得这个很重要
  2. 自动对焦模块理论基础及其硬件实现浅析(一)
  3. LC滤波器设计学习笔记(一)滤波电路入门
  4. 2014年节假日放假方案发布,全年假期依然维持11天不变
  5. MyBatis 如果不存在则插入
  6. 持续迭代、永久更新的WIN NFT HORSE,具有无穷无尽的生命力
  7. 当面试官问“你有什么要问我的吗”时,应该说什么?
  8. 对于RISC-V的初步学习理解——RISC-V简介
  9. 千里马Android Framework-input系统专题blog目录集合
  10. error: insufficient permission for adding an object to repository database .git/objects