opencv打开视频文件出错

使用C#调用mingw的so文件,在C++端使用opencv打开视频。这样的项目完成过了一个,第二次做的时候,发现opencv打开视频文件出错。

首先怀疑是opencv的opencv_ffmpeg2410.dll文件找不到,确认了文件位置仍然不行。

然后怀疑是新换的mingw32编译器问题,换回了老版本仍然不行。

最后确认了视频文件的存在性,传递文件名的正确性,一切正常,视频无法打开。

在试验过程中,出现了很多次segmentation fault的情况,发现是因为两个mingw32编译器和他们的运行时库冲突问题。当我切换了环境变量更换编译器时,由于VS2010不重启,环境变量就不更新,所以使用VS2010启动的程序还使用原来的运行时dll;在vim中编译时,不退出环境变量不更新,有时根本没有换编译器编译。而测试编译器时一般都是在新建的命令窗口中输入g++ --version,这样看到的结果都是对的。

为了确认程序引用的dll正确性,关闭了所有程序,删除了散乱的运行时dll,将PATH环境变量整理后,打开了之前项目里做的工程,结果之前的工程能够在两个版本编译器下正确运行,而且与so文件位置无关。此时问题定位在了新写的so库上。

将新的工程中so库的代码一点一点的注释,最后只剩下视频部分,仍然不能打开。再将老工程直接复制过来,接口与新的工程做成一样的,就是让新的C#程序调用老的so文件,结果能够成功打开,然后在老so基础上逐步修改,发现修改指令部分时就出错了,最后怀疑是视频文件名正确性,之前确认正确性的时候只是从日志文件中看到了文件名,在资源管理器中证明了正确性,但文件名中可能存在无法显示的字符,导致无法访问。所以在程序中加入了  slog.log(sFormat("%s,%d",url.c_str(),url.size()).c_str()); 输出文件名的长度为26个字符,而使用无法打开视频的代码,文件名长度为27字符,说明不对,多出来的是文件名前端的空格,修改命令解析部分,删除空格后,正确执行。

时间: 2024-10-13 22:49:09

opencv打开视频文件出错的相关文章

【探索OpenCV】OpenCV读取视频文件

OpenCV读取视频文件之前需要做是事情: 1.下载视频编码解码器 推荐XviD,下载链接:http://pan.baidu.com/s/1jGjE2ii 密码:xrni 2.用格式工厂将视频文件转成标准格式,如*.avi /*----------------------------------------OpenCV视频读取代码---------------------------------------------*/ CString Filepath; CFileDialog dlg(TR

三 调用摄像头或打开视频文件

调用摄像头 # -*- coding=GBK -*- import cv2 as cv #打开摄像头获取图片 def video_demo(): capture = cv.VideoCapture(0)#打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值 while True: ret, frame = capture.read() #读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片:第二个参数是frame,是当前截取一

【学习ffmpeg】打开视频文件,帧分析,并bmp保存关键帧

http://www.tuicool.com/articles/jiUzua http://blog.csdn.net/code_future/article/details/8646717 主题 FFmpeg 任务:需要把一个视频文件的每一帧提取出来,每帧存储成单独的文件. 以前用Matlab处理过这个问题,可是感觉比较慢,而且最近正在逐步转向使用开源的东西.因此搜到ffmpeg这个好东西. ffmpeg可用来处理视频文件的提取和各种转换,跨平台,官网上有Linux,WINDOWS和MAC版本

不打开视频文件从视频的指定时间下截图

import PILfrom PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFontfrom moviepy.editor import VideoFileClip, concatenate_videoclipsclip1 = VideoFileClip("1.mp4")clip1.save_frame("./capture/frame.jpeg", t='00:01:00') # fra

C#打开office文件,pdf文件和视频文件

打开office文件 1 需要从网站下载dsoframer.ocx文件 2 把dsoframer.ocx文件复制到c:\windows\system32目录下 开始->运行->regsvr32 dsoframer.ocx , 系统会提示DSOFramer.ocx中的DllRegisterServer成功 3 在VS中新建项目,添加引用 4 将该控件加载到工具箱(添加新选项) 5 将控件拖到窗体中 打开文件:this.axFramerControl1.Open(filepath); (备注:也有

转:利用ffmpeg和opencv进行视频的解码播放

引子 OpenCV中有自己的用于处理图片和视频的类 VideoCapture ,可以很方便的读入文件和显示. 现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,所以需要将ffmpeg中得到的数据缓存转换成可以被OpenCV处理的Mat类对象. ffmpeg介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库

OpenCV打开摄像头失败

<span style="font-family: Arial, Helvetica, sans-serif;">#include <stdio.h></span> #include <cv.h> #include <cxcore.h> #include <highgui.h> int main( int argc, char** argv ) { //声明IplImage指针 IplImage* pFrame =

利用ffmpeg和opencv进行视频的解码播放

引子 OpenCV中有自己的用于处理图片和视频的类VideoCapture,可以很方便的读入文件和显示. 现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,所以需要将ffmpeg中得到的数据缓存转换成可以被OpenCV处理的Mat类对象. ffmpeg介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库li

3、写入AVI视频文件

创建一个写入设备以便逐帧将视频流写入视频文件,用函数cvCreateVideoWriter()实现.当输出设备被创建以后,调用cvWriterFrame()逐帧将视频流写入文件.最后调用cvReleaseVideoWriter()来释放资源. 涉及函数: 1 IplImage* cvQueryFrame( CvCapture* capture ); 从摄像头或者文件中抓取一帧,并返回这一帧,返回的图像不可以被用户修改或者释放.cvQueryFrame使用已经在CvCapture结构中分配好的内存