摄像头显示OpenCV或DirectShow

摄像头显示OpenCV或DirectShow

    对于OpenCV和DirectShow应该是没有哪个比哪个强,而是他们各有各的用处,如DirectShow用于视频采集容易些,而OpenCV用于图像处理容易些。我觉得现在通常是两者相结合的,单独使用的话都会有些缺点,可以去OpenCV中文网站上,那里有很多两者结合使用的例子。

    为什么用DirectShow?在视频采集方面,DirectShow比OpenCV优秀,因为OpenCV采用的是VFW机制,而DirectShow采用的是WDM机制,虽然后者也有点老,但比VFW新,并且有广泛的视频采集卡支持。

    目前只知道OpenCV支持AVI格式的视频读取,但是同为AVI格式的文件,其编码的方式也有可能不一样,还是不行,后来又发现OpenCV目前支持XVID和DIVX等编码器编码的视频。OpenCV 所能支持的格式为AVI — Audio-Video.lnterleaved(*.avi )是将与语言同步组成在一起的格式 ,所以需要用软件装换下格式,比如“格式工厂”、“狸窝全能视频转换器”等。

    视频分辨率问题。DirectShow貌似只能是低于640X480,而OpenCV支持各种分辨率。

    OpenCV中打开多摄像头之前很多人研究过了,需要用到DirectShow,在OpenCV中文网上于老师也将DS进行打包,直接在OpenCV直接可以调用了。如果有兴趣,也可以做尝试,这里可以下载源程序。因为OpenCV2.xx中把DirectShow的程式整合进去了,就可以直接进行调用了(其实是一样的道理),就是cvCaptureFromCAM()。

    【以上摘自各Blog】

    下面是用OpenCV2.4.6写的读入视频的程序。

#include 
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

void main()
{
	VideoCapture cap1(0); // open the first camera
	VideoCapture cap2(1); // open the second camera
	if(!cap1.isOpened() && !cap1.isOpened()) return;// check if we succeeded

	namedWindow("camera1", 1);
	namedWindow("camera1", 1);
	for(;;)
	{
		Mat frame1,frame2;
		cap1 >> frame1; 
		cap2 >> frame2;

		imshow("camera1", frame1);
		imshow("camera2", frame2);
		if(waitKey(30) >= 0) break;
	}
	return;
}


你可能感兴趣的:(摄像头显示OpenCV或DirectShow)