解码器+OpenCv+DirectShow

 最近用OpenCV做图像处理,发现用cvCaptureFromFile打开视频文件时,总是返回空指针。开始以为是参数类型不对,以为一定要用 char *文件名,后来发现就是把文件名转成char *还是不行。然后就到网上查了查,发现很多人都遇到了这个问题。但是其原因所在,却又不同的解释,比较普遍的看法是缺少解码器,并且推荐使用K-Lite Code Pack。

      在GOOGLE上搜索下载安装K-Lite Code Pack后,发现问题解决了。看网上有的人说,安装K-Lite Code Pack后还是不行,还是不能打开视频文件,这个问题目前我也不是很清楚,不知道还有什么别的原因。

      顺便再说一下,cvCaptureFromFile函数原型是cvCaptureFromFile(const char* filename),要求传入的文件名是char *类型,但是其实CString类型也是可以的,我用CFileDlg获取到的文件名也可以正常打开视频文件。

【补充一点,抄来的】openCV里面的cvCaptureFromFile是否只能打开avi格式的?

如果只是做研究,用AviSynth + K-Lite Code Pack来解决这个问题吧。

K-Lite Code Pack里面包括ffdshow,是一套video codec的组合,它提供
Video For Windows 的接口,OpenCV的这个函数就是用这个接口;

然后用AviSynth这个virtual frame server来包装这个mpeg文件,创建一
个简单的script,比如 mobile.avs,里面只有一行:
MpegSource("mobile.mpg")
当然这取决于你的mpeg的文件的压缩方式,也 许需要额外的AviSynth的plugin.
装好K-lite Codec和AviSynth之后,你可以先用播放器直接放这个mobile.avs
文件看是否行得通。

视频实际上的读取过程是:
原始视频 -> ffdshow -> AviSynth -> OpenCV -> IplImage

K-lite Codec Pack主页:http://www.codecguide.com/download_kl.htm 
AviSynth 主页:http://www.avisynth.org/ 
相 关讨论区:http://www.doom9.org/

另外一条路是基于DirectShow filter/sample grabber的办法来读取video frames,
可以看看: http://windowssdk.msdn.microsoft.com/en-us/library/ms787867.aspx 
这 种方法需要下载DirectX SDK和DirectShow的addon,同时也需要相关codec,
视频的读取过程是:
原始视频 -> codec -> DirectShow(frame grabber) -> Windows Bitmap -> IplImage

如果是只做研究用,推荐第一条;如果是商业用途,得要看license来决定了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VS2019和DirectShowWindows平台下常用的开发工具和多媒体框架,而OpenCV是一个图像处理和计算机视觉库。 VS2019是由微软开发的集成开发环境(IDE),主要用于Windows上的应用程序开发。它提供了丰富的开发工具和功能,可以方便开发者进行代码编辑、编译、调试和部署等工作。对于DirectShow,它是一个面向Windows平台的多媒体框架,提供了在应用程序中捕获、处理和展示音视频数据的功能。通过DirectShow,我们可以开发各种多媒体应用,包括视频播放器、视频会议软件等。 而OpenCV是一个开源的图像处理和计算机视觉库,它可以用于处理图像、视频和三维点云等数据。OpenCV提供了各种各样的图像处理算法和函数,包括图像滤波、特征检测、相机标定等。通过OpenCV,我们可以方便地进行图像和视频处理,同时还能实现计算机视觉相关的任务,如目标检测、人脸识别等。 在VS2019中,我们可以使用DirectShow来进行音视频的捕获和处理,同时结合OpenCV库,可以对捕获的音视频进行图像处理和计算机视觉相关的任务。通过这样的组合,我们能够开发出更加强大和丰富的多媒体应用程序,尤其在需要对图像和视频进行处理的场景中,可以发挥其优势。 总的来说,VS2019作为IDE提供了开发多媒体应用所需的开发工具和环境,而DirectShowOpenCV作为框架和库,提供了处理音视频和计算机视觉相关任务的功能和算法。它们之间的结合可以帮助开发者更好地实现多媒体应用的开发。 ### 回答2: VS2019是微软开发的集成开发环境,而DirectShow是微软开发的用于多媒体处理的API。OpenCV是一款开源的计算机视觉库。 在使用VS2019进行开发时,可以使用DirectShow来实现多媒体处理相关的功能,例如音视频播放、视频采集、图像处理等。通过DirectShow,可以方便地处理多种格式的音视频数据,并进行各种需要的操作。VS2019提供了DirectShow的相关支持,可以通过安装DirectX SDK来获取DirectShow的开发包。 而OpenCV则是一款强大的计算机视觉库,其中包含了许多图像处理、计算机视觉和机器学习相关的功能和算法。在使用VS2019进行开发时,可以通过集成OpenCV来实现各种图像处理和计算机视觉相关的功能,如图像读取、图像处理、特征提取、目标检测等。通过OpenCV,可以快速地实现各种计算机视觉应用,并且OpenCV还提供了丰富的文档和示例供开发者参考。 总之,VS2019可以与DirectShowOpenCV结合使用,通过DirectShow实现音视频处理相关的功能,通过OpenCV实现图像处理和计算机视觉相关的功能。这样可以方便地进行多媒体和视觉应用的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值