我想从现场正在进行的视频中检测特定对象。因此我将帧提取部分(opencv,c ++)作为一部分和其他部分的其他检测功能(emgucv,c#)实现。为了整合这些部分,我将c ++项目的exe文件添加到c#项目中,并且运行良好。但现在我想在离线状态下测试这个项目。这意味着我想通过使用保存在硬盘中的视频来测试这个项目。在集成之前,c ++项目可以在线上和线下两种情况下执行。但在集成之后只能在在线条件下执行。请帮我解决这个问题。
答案 0 :(得分:3)
你总是可以尝试使用魔术相机,假网络摄像头等任何网络摄像头模拟器(只需google它,互联网上有很多软件) - 它们会播放视频文件,好像它来自你的网络摄像头一样。 / p>
但是,您可能还想考虑重新组织软件设计,以便它可以接受流和文件输入 - 一旦将处理逻辑与捕获逻辑分开,它应该非常简单。
答案 1 :(得分:0)
实时摄像机基本上是图像帧的异步源。假设您将回调函数传递给相机API,并且在新帧可用时触发该回调?您可以以相当直接的方式模仿此功能。
编写一个打开视频文件的函数,然后循环运行...循环的每次迭代,它从文件中抓取一个帧,适当地打包它然后调用你的回调函数。然后它可以休眠几毫秒,然后重复循环。在自己的线程中运行此函数。从回调的角度来看,它与现场摄像机没有什么不同。