Opencv读取视频文件的几个问题及解决方法(读入空Mat,访问冲突)
来源:互联网 发布:linux mmap shm 编辑:程序博客网 时间:2024/06/16 13:31
在录制视频再读入处理的过程中遇到了一些小问题,附上解决过程。
首先Opencv读取视频很方便,直接把读摄像头的参数改成视频路径即可。
VideoCapture cap(0);//读取摄像头的代码改成
VideoCapture cap("1.avi");//1.avi为调试目录下的一个文件,也可以"C:\\1.avi"类似的绝对路径
但运行过程中遇到了两个问题:
1.获取cap的帧数和真正imshow的不匹配(可能是我录制视频软件的问题?),以我测试的视频为例,最后8帧读入的都是空的,再imshow便会出问题。
各位有兴趣可以下载我测试的视频尝试一下(包含测试代码):http://download.csdn.net/detail/zmdsjtu/9709042
【解决方法】try-catch了一下(详情见下方代码)
2.视频播放结束之后有访问冲突(这真的是一个非常头疼的问题……)
【解决方案一】调用destroyAllWindows()就不报错了,还没搞清楚原因,代码如下:
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include<thread>#include<iostream>using namespace cv;int main(){VideoCapture cap("1.avi");Mat frame;int 帧数 = cap.get(CAP_PROP_FRAME_COUNT);//7try {while (waitKey(50) != 27 && 帧数-- >0){cap >> frame;//if (frame.empty())break;imshow("调用摄像头", frame);}}catch (cv::Exception&e){std::cout << e.what() << std::endl << 帧数 << std::endl;};cv::destroyAllWindows();//Destroy窗口就不报错了……//system("pause");return 0;}
【解决方法二】开启一个线程
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include<thread>#include<iostream>using namespace cv;int main(){std::thread 另开一个线程不报错([&] {VideoCapture cap("1.avi");Mat frame;int 帧数 = cap.get(CAP_PROP_FRAME_COUNT);//7try {while (waitKey(50) != 27 && --帧数 != 0){cap >> frame;imshow("调用摄像头", frame);waitKey(30) != 27;}}catch (cv::Exception&e){std::cout << e.what() << std::endl << 帧数 << std::endl;} });另开一个线程不报错.join();return 0;}
祝Opencv使用愉快:)
0 0
- Opencv读取视频文件的几个问题及解决方法(读入空Mat,访问冲突)
- 基于OpenCV的AVI视频文件读取及运动检测
- 基于OpenCV+MFC的AVI视频文件读取及运动检测
- opencv Mat 类型数据传递,出现访问冲突,有解决方法,但不知原因
- opencv由Mat相乘想到的几个问题
- opencv像素的访问(Mat)
- 0xC0000005: 读取位置 0x6C6C6568 时发生访问冲突的原因及解决方法
- Opencv Mat的数据读取
- 读取视频文件(基于OpenCV 的C++程序)
- OpenCV学习笔记(4)视频文件的读取与保存
- opencv学习笔记(2)视频文件的读取与保存
- OpenCV入门教程(8)-视频文件的读取和存储
- OpenCV教程 之 基础操作:图像的读入、输出、访问、Mat类、色彩缩减与线性融合
- 【OpenCV】读取显示图片及Mat类
- OpenCV读取视频文件方法
- OpenCV读取视频文件
- 【OpenCV】中的数据型别(Mat数据的读取)
- 关于VS访问冲突的原因及解决方法
- 数组-对引用类型的排序-冒泡法
- PHP-----mysqli编译预处理
- linux命令 天天记
- 数据结构与算法(单链表)
- 主线程在分支线程运行完成之后执行
- Opencv读取视频文件的几个问题及解决方法(读入空Mat,访问冲突)
- C++ 类的静态成员详细讲解
- React Native 初入门-->我遇到的那些问题
- 【android开发】实现Activity息屏状态下点亮屏幕并弹出(类似来电界面)
- FreeBSD常用命令
- 你也可以掌控EMI:EMI基础及无Y电容手机充电器设计
- java正则表达式教程(翻译)
- enumGroup函数
- 数列求和 S=A+AA+AAA+...