OpenCV2.4.11调用摄像头显示拍摄视频出错
2016-11-25 21:32
459 查看
问题:使用OpenCV2.4.11调用摄像头显示拍摄视频时报runtime error,控制台窗口出现OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ……..\opencv\modules\highgui\src\window.cpp, line 261。
解决方法:在显示图片时先判断是否有数据,如下:
或
原因可能是:我们用opencv打开视频的时候,会自动先监测摄像头有没有读到帧,如果没有,就会报错,然后再执行你的程序,而一般打开摄像头会有一定时间的延迟。有人认为原因是在VideoCapture刚开始获取摄像头视频流的过程不返回信号,所以判断Mat是否为空,并不断循环去获取Mat。加一个if判断就是跳过系统自己的判断,直接执行我们的程序。
附完整示例程序:
参考资料:
1. OpenCV2.3使用摄像头和视频(http://blog.sina.com.cn/s/blog_a3e7ccd6010105yn.html)
2. OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, fi 这个问题怎么办?(http://zhidao.baidu.com/link?url=pIM9Hr0-Yalk-uj8cm5ml0y91X92jJmPAXMKQ-1h7FXSPsrwTiD6_9Ngfq72hmxbVDjNE0aYTOmXCCVEryZvhNBJGW6FbsqjO6dbjVLEZt3)
3. OpenCV打开摄像头出现运行错误OpenCV Error:Assertion failed (size.width>0&&size.height>0)in cv::imshow,…… (http://blog.csdn.net/czl389/article/details/51031100)
4. [OpenCV]获取摄像头视频(http://www.cnblogs.com/tiny656/p/3538115.html?utm_source=tuicool&utm_medium=referral)
解决方法:在显示图片时先判断是否有数据,如下:
if (!image.empty()) { imshow("window", image); }
或
if (image.data) { imshow("window", image); }
原因可能是:我们用opencv打开视频的时候,会自动先监测摄像头有没有读到帧,如果没有,就会报错,然后再执行你的程序,而一般打开摄像头会有一定时间的延迟。有人认为原因是在VideoCapture刚开始获取摄像头视频流的过程不返回信号,所以判断Mat是否为空,并不断循环去获取Mat。加一个if判断就是跳过系统自己的判断,直接执行我们的程序。
附完整示例程序:
#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> // 调用摄像头 void videoCapture() { //cv::VideoCapture cap(0); // 打开默认摄像头,参数0代表默认摄像头的ID cv::VideoCapture cap; cap.open(0); // 设置摄像头 cap.set(CV_CAP_PROP_FRAME_WIDTH,640); cap.set(CV_CAP_PROP_FRAME_HEIGHT,480); // 确认是否成功打开摄像头 if (!cap.isOpened()) { printf("打开摄像头失败,退出!\n"); exit(-1); } cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO); while (1) { cv::Mat frame; cap >> frame; // 获取帧 // 对摄像头获取的帧进行各种处理 if (!frame.empty()) // 最好加上该判断,并在该判断中对帧进行处理 { cv::imshow("Capture", frame); } if(cv::waitKey(30) >= 0) break; // 每30ms取一帧 } } int main(int argc, char *argv[]) { videoCapture(); return 0; }
参考资料:
1. OpenCV2.3使用摄像头和视频(http://blog.sina.com.cn/s/blog_a3e7ccd6010105yn.html)
2. OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, fi 这个问题怎么办?(http://zhidao.baidu.com/link?url=pIM9Hr0-Yalk-uj8cm5ml0y91X92jJmPAXMKQ-1h7FXSPsrwTiD6_9Ngfq72hmxbVDjNE0aYTOmXCCVEryZvhNBJGW6FbsqjO6dbjVLEZt3)
3. OpenCV打开摄像头出现运行错误OpenCV Error:Assertion failed (size.width>0&&size.height>0)in cv::imshow,…… (http://blog.csdn.net/czl389/article/details/51031100)
4. [OpenCV]获取摄像头视频(http://www.cnblogs.com/tiny656/p/3538115.html?utm_source=tuicool&utm_medium=referral)
相关文章推荐
- 《OpenCV》Part2 OpenCV3.1.0调用摄像头显示视频并拍照
- 使用Opencv调用摄像头并在MFC中进行视频显示
- Opencv——将摄像头拍摄写成视频文件
- OpenCV 获取摄像头并显示摄像头视频
- 在MFC中通过opencv显示摄像头视频或者文件视频
- 在MFC中通过opencv显示摄像头视频或者文件视频
- 在MFC中通过opencv显示摄像头视频或者文件视频
- OpenCV 获取摄像头并显示摄像头视频
- opencv获取摄像头视频并显示
- opencv 从摄像头显示视频
- 利用opencv类库在MFC显示摄像头视频并且保存摄像头视频
- Unity3D调用摄像头显示当前拍摄画面
- OpenCV学习笔记 利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面 .
- opencv调用摄像头在mfc控件中显示黑屏问题的解决
- Unity3D调用摄像头显示当前拍摄画面
- Unity3D调用摄像头显示当前拍摄画面
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- Zedboard摄像头获取视频设计问题篇(四)-OpenCV+QT配置显示图片
- OpenCV 获取笔记本摄像头,新建窗口显示摄像头视频
- OpenCV 获取摄像头,新建窗口显示摄像头视频