基本上我需要从摄像机捕获视频,对帧进行一些处理,并为每一帧显示一个检测矩形。
示例:http ://www.youtube.com/watch?v=aYd2kAN0Y20
您将如何将此矩形叠加在摄像机(usb)的输出上?(c++)
基本上我需要从摄像机捕获视频,对帧进行一些处理,并为每一帧显示一个检测矩形。
示例:http ://www.youtube.com/watch?v=aYd2kAN0Y20
您将如何将此矩形叠加在摄像机(usb)的输出上?(c++)
我会使用 OpenCV,一个开源成像库从网络摄像头/视频文件中获取输入。以下是有关如何安装它的教程:
http://opensourcecollection.blogspot.com.es/2011/04/how-to-setup-opencv-22-in-codeblocks.html
然后我会使用这段代码:
CvCapture *capture = cvCreateCameraCapture(-1);
IplImage* frame = cvQueryFrame(capture);
要获取图像,frame
从CvCapture
, capture
。
在这种情况下,capture
直接从摄像机拍摄,但您也可以从视频文件创建它:
CvCapture *capture = cvCreateFileCapture("filename.avi");
然后,我将使用此处定义的函数绘制图像:http: //opencv.willowgarage.com/documentation/drawing_functions.html
顺便说一句,Youtube 视频中的形状不是矩形。是一个平行四边形。
如果你想现场做,那么你基本上可以把它放在一个循环中,得到一个帧,处理它,在上面画图,然后输出图像,像这样:
你会在你的循环之前包括这个:
cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);
然后,在你的循环中,你会这样说:
cvShowImage("Capture", frame);
处理后。
编辑要在 C++ 中执行此操作,请像这样打开您的网络摄像头:
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
要从文件初始化它,而不是放入相机索引,放入文件路径。
像这样从相机中获取帧:
Mat frame;
cap >> frame; // get a new frame from camera
然后你可以在这里找到绘图函数:http: //opencv.willowgarage.com/documentation/cpp/core_drawing_functions.html
干杯!