代码
之前我找过directshow,CameraDS,VedioCaptureFromCam之类的东西,发现都不可以用。directshow是因为版本太老了,会出现:
http://www.opencv.org.cn/forum.php?mod=viewthread&action=printable&tid=33813
VedioCaptureFromCam就会显示不出图片。所以后来我想想应该是库的问题,要包含最新的库。我不是学习CV的,这次就算是乱搞一通了。
后来我发现我的OpenCV的版本是2.4.10
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
VideoCapture cap0(0);
VideoCapture cap1(1);
if(!cap0.isOpened())
{
return -1;
}
if(!cap1.isOpened())
{
return -1;
}
Mat frame0,frame1;
bool stop = false;
while(!stop)
{
cap0 >> frame0;
cap1 >> frame1;
imshow("Vedio0",frame0);
imshow("Vedio1",frame1);
if(waitKey(30) >=0)
stop = true;
}
return 0;
}
下面这段代码就是运行起来没有捕捉图像的,应该是版本问题,我的是比较新的版本了。
int main()
{
CvCapture* capture=cvCaptureFromCAM(-1);//¶ÁÈ¡ÉãÏñÍ·
cvWaitKey(200);
if(capture==NULL)
{
printf("zzzz");
return 0;
}
IplImage* frame;
cvNamedWindow("video");
while(1)
{
frame=cvQueryFrame(capture);
if(!frame)
break;
cvWaitKey(200);
cvShowImage("video",frame);
}
cvSaveImage("pic.jpg",frame);
cvWaitKey();
cvReleaseCapture(&capture);
cvDestroyWindow("video");
return 0;
}
数据类型
如果代码是比较旧的版本的话,那么你会发现获取的视频是属于Mat数据结构,但是有很多代码是IplImage数据结构的。所以我们为了让我们的代码实现,那么我们就需要进行数据结构的转换。具体参考:
http://blog.csdn.net/fm0517/article/details/7479090
我们对于捕获到的图像需要进行设置帧率之类的东西,可以参考:
http://www.tuicool.com/articles/y2iEBn
http://blog.163.com/yuyang_tech/blog/static/21605008320139164358426/
http://blog.163.com/yuyang_tech/blog/static/21605008320139164358426/
运行效果
参考博客: