一个关于OpenCV2.2静态编译时无法用cvCaptureFromFile读取文件的问题
2012-10-05 20:36
579 查看
opencv一般用动态编译,但是为了测试一些小程序也要讲dll全复制到其他电脑上去,非常麻烦。这两天尝试将opencv静态编译,基本都能工作,只是无法通过cvCaptureFromFile读取视频文件。
一开始我以为是编解码库的问题,装了XviD、ffdshow也没见什么效果。而且2.2本来就自带了ffmpeg的一些基本的解码库,百思不得其解。最后只好翻开源码调试,发现在cap_w32.cpp里有这样一句话
并且
好了,原来icvCreateFileCapture_FFMPEG_p这个函数是指向ffmpeg220.dll里的cvCreateFileCapture_FFMPEG的指针。而且无论opencv是否通过静态编译,它都会去加载这个dll,而通过一般方法制作的静态库当然不会编译出这个dll。所以只能在cmake将shared library勾上,重新编译一个ffmpeg220.dll库。
虽然让人觉得很不方便,而且看上去是个bug,不过官方的解释是ffmpeg的源码都是通过LGPL发布的,如果静态链接ffmpeg会导致highgui也必须按照GPL/LGPL发布,而opencv所有源码都是通过BSD发布的,所以因为许可证的问题只能动态链接。下面是关于这个问题的链接。
https://code.ros.org/trac/opencv/ticket/687
一开始我以为是编解码库的问题,装了XviD、ffdshow也没见什么效果。而且2.2本来就自带了ffmpeg的一些基本的解码库,百思不得其解。最后只好翻开源码调试,发现在cap_w32.cpp里有这样一句话
ffmpegCapture = icvCreateFileCapture_FFMPEG_p( filename );运行过程中ffmpegCapture总是0。也就是icvCreateFileCapture_FFMPEG_p这个函数没有返回正常值。接着追踪,发现
icvCreateFileCapture_FFMPEG_p = (CvCreateFileCapture_Plugin)GetProcAddress(icvFFOpenCV, "cvCreateFileCapture_FFMPEG");
并且
const char* ffopencv_name = ffopencv_name_m(CV_MAJOR_VERSION,CV_MINOR_VERSION,CV_SUBMINOR_VERSION); icvFFOpenCV = LoadLibrary( ffopencv_name );
好了,原来icvCreateFileCapture_FFMPEG_p这个函数是指向ffmpeg220.dll里的cvCreateFileCapture_FFMPEG的指针。而且无论opencv是否通过静态编译,它都会去加载这个dll,而通过一般方法制作的静态库当然不会编译出这个dll。所以只能在cmake将shared library勾上,重新编译一个ffmpeg220.dll库。
虽然让人觉得很不方便,而且看上去是个bug,不过官方的解释是ffmpeg的源码都是通过LGPL发布的,如果静态链接ffmpeg会导致highgui也必须按照GPL/LGPL发布,而opencv所有源码都是通过BSD发布的,所以因为许可证的问题只能动态链接。下面是关于这个问题的链接。
https://code.ros.org/trac/opencv/ticket/687
相关文章推荐
- OpenCV1.0版本中cvCaptureFromFile()函数无法读取.avi文件的解决办法
- OpenCV 1.0 cvCaptureFromFile读取视频失败问题
- OpenCV的cvCaptureFromAVI不能读文件的问题
- 关于Spring与mybatis整合无法读取配置文件的问题
- OpenCv中cvCaptureFromFile返回NULL的问题
- 关于springMVC在配置了json时 静态文件无法访问的问题
- 一个关于VS2008在其他未安装VS2008的电脑上无法运行编译的程序的问题 收藏
- opencv的cvCaptureFromAVI读文件的问题
- 一个关于VS2008在其他未安装VS2008的电脑上无法运行编译的程序的问题
- 一个关于webservice的Axis问题 Processing file deploy.wsdd Exception: deploy.wsdd (系统找不到指定的文件。)
- OpenCv中cvCaptureFromFile返回NULL的问题
- OpenCV在多线程下不能读取AVI视频新的解决办法cvCaptureFromFile
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- opencv的cvCaptureFromAVI读文件的问题
- [置顶]关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)
- 关于C#Image.FromFile文件不释放问题的解决
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- 解决opencv中cvCaptureFromFile不能打开一些视频文件
- 关于微信WEBVIEW网页无法上传文件的问题,即是INPUT FILE不支持的问题