OpenCv实现多路播放
Posted 西北老码农
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCv实现多路播放相关的知识,希望对你有一定的参考价值。
我们在实际的视频多路实现过程中,往往会遇到硬件资源不够的问题,那么如何在有限的资源下,实现多路的视频播放呢?
OpenCv为我们提供了一个VideoCapture的数组,我们可以把每一路视频放在各个数组中,在使用while循环来逐个读取显示每一路视频。其实类似于多线程并行处理,直接上代码:
#include "stdafx.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "omp.h"
using namespace cv;
using namespace std;
#define CAM_NUM 4
int _tmain(int argc, _TCHAR* argv[])
VideoCapture cap[CAM_NUM];
Mat img;
string str = "scene_1//frame_%4d.jpg";
int i;
#pragma omp parallel for
for (i=0;i<CAM_NUM;i++)
cap[i].open(str);
int width = cap[0].get(CV_CAP_PROP_FRAME_WIDTH);
int height = cap[0].get(CV_CAP_PROP_FRAME_HEIGHT);
int min_width = width/2;
int min_height = height/2;
Mat imageShow(height,width,CV_8UC3);
int left,top;
Mat temp;
bool runflag = true;
while (1)
#pragma omp parallel for private(img,temp,left,top)
for (i=0;i<CAM_NUM;i++)
cap[i] >> img;
resize(img,temp,Size(min_width,min_height));
left = i/2 *min_width;
top = i%2 *min_height;
temp.copyTo(imageShow(Rect(left,top,min_width,min_height)));
if (!runflag)
break;
namedWindow("Image");
imshow("Image", imageShow);
waitKey(12);
return 0;
以上通过简单模拟4路视频的播放,每个通道分配一个CPU核,如果是16核的机器,可以同时显示16路视频。
以上是关于OpenCv实现多路播放的主要内容,如果未能解决你的问题,请参考以下文章