在来自相机的视频上显示一个矩形

Showing a rectangle over a video from camera

本文关键字:一个 显示 相机 的视频      更新时间:2023-10-16

基本上我需要从摄像机捕获视频,对帧进行一些处理,并为每帧显示一个矩形检测。

示例: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);

要获取图像,请从CvCapture framecapture

在这种情况下,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

干杯!

相关文章: