关于opencv2.4.9和VS2013在windows7下无法打开摄像头的问题的扯淡解决办法
2014-12-17 19:03
549 查看
最近在做一个关于在摄像头中捕捉人脸并追踪人的眼睛的项目,在编程过程中发现始终无法打开摄像头。
后来发现的问题主要集中在以下几个方面:
一 、opencv 的数据不足以支持获取的视频图像。
"buffers do not match"问题是捕捉的视频的图像的分辨率高于opencv 中的数据结构能够承载的最大的数据范围,所以导致虽然能够打开摄像头,但是显示出错,所以在debug时会报错。
这种问题的解决 办法是在获取到frame后,对frame进行参数的重新设置,降低图像的分辨率,再显示图像,就没问题了。
二 、摄像头的驱动不匹配
始终无法打开摄像头,也不报错。
使用cvCaptureFromCam(-1)始终返回为NULL.或者使用CreateCameraCapture都无法打开摄像头。这种情况主要是由于windows 下的摄像头的都用了Directshow,而opencv 的这两个函数都需要使用VFW的驱动才能正常使用。解决办法:比较复杂,可以在VS中加入DirectShow的一些函数库,来实现二者的兼容。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap;
if (argc > 1)
cap.open(argv[1]);
else
cap.open(0);
if (!cap.isOpened())
{
std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
return -1;
}
namedWindow("FG Segmentation", WINDOW_NORMAL);
for (;;)
{
cap >> frame;
if (frame.empty())
break;
frame.copyTo(segm);
imshow("FG Segmentation", segm);
int c = waitKey(30);
if (c == 'q' || c == 'Q' || (c & 255) == 27)
break;
}
return 0;
}
尝试了这么久,终于实现了基本的功能,好开心!!
来源:
杨豪 Hans
http://write.blog.csdn.net/postlist
e-mail: Hansyang@buaa.edu.cn
后来发现的问题主要集中在以下几个方面:
一 、opencv 的数据不足以支持获取的视频图像。
"buffers do not match"问题是捕捉的视频的图像的分辨率高于opencv 中的数据结构能够承载的最大的数据范围,所以导致虽然能够打开摄像头,但是显示出错,所以在debug时会报错。
这种问题的解决 办法是在获取到frame后,对frame进行参数的重新设置,降低图像的分辨率,再显示图像,就没问题了。
二 、摄像头的驱动不匹配
始终无法打开摄像头,也不报错。
使用cvCaptureFromCam(-1)始终返回为NULL.或者使用CreateCameraCapture都无法打开摄像头。这种情况主要是由于windows 下的摄像头的都用了Directshow,而opencv 的这两个函数都需要使用VFW的驱动才能正常使用。解决办法:比较复杂,可以在VS中加入DirectShow的一些函数库,来实现二者的兼容。
主要就是这两个问题。起先为了解决摄像头打不开的问题,查找了无数的例程,始终解决不了问题。最后在opencv2.4.9的自带的几个sample中找到了一个使用摄像头的程序,发现其中并没有使用CvCaptureFromCam和CreateCameraCapture函数,而是使用了一个VideoCapture cap的结构来解决问题。
下面为代码:#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap;
if (argc > 1)
cap.open(argv[1]);
else
cap.open(0);
if (!cap.isOpened())
{
std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
return -1;
}
namedWindow("FG Segmentation", WINDOW_NORMAL);
for (;;)
{
cap >> frame;
if (frame.empty())
break;
frame.copyTo(segm);
imshow("FG Segmentation", segm);
int c = waitKey(30);
if (c == 'q' || c == 'Q' || (c & 255) == 27)
break;
}
return 0;
}
尝试了这么久,终于实现了基本的功能,好开心!!
来源:
杨豪 Hans
http://write.blog.csdn.net/postlist
e-mail: Hansyang@buaa.edu.cn
相关文章推荐
- 关于opencv2.4.9和VS2013在windows7下无法打开摄像头的问题的扯
- VS2013配置OpenCV2.4.9出现fatal error LNK1104:无法打开文件kernel32.lib的解决方法
- VS2013配置opencv出现msvcp110d.dll丢失问题解决办法
- 关于vs2013与office系列软件一起安装出现bug的情况描述以及解决办法——打开vs2013鼠标不动/动不了
- 关于sqlmap无法打开的问题解决办法
- 关于appium操作真机打开app之后无法定位页面元素的问题的解决办法
- 关于LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d24Xd.lib”问题解决
- 关于VS编译时出现无法打开libcmrt.lib,libc.lib等系统常见库文件的解决办法
- VS2013 MFC+opencv2.4.9打开摄像头拍照图片处理
- OpenCV2.2无法打开摄像头的解决办法
- Cocos2dx3.4 VS2013无法打开包含文件extensions/ExtensionExport.h解决办法
- 关于vs2013与office系列软件一起安装出现bug的情况描述以及解决办法——打开vs2013鼠标不动/动不了
- OpenCV2.2无法打开摄像头的解决办法
- 更新到win8.1后vs2013打开出错的问题解决办法
- 关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
- 【问题解决】vs2013无法打开vs2010的解决方案
- vs2013报错 无法打开包含文件 "winsock2.h" 的一种解决办法
- vs2013:报错 无法打开包含文件 "winsock2.h" 的一种解决办法
- 关于opencv无法打开win7笔记本摄像头问题
- VS2013 EMWIN无法编译、仿真问题解决办法