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实现多路播放的主要内容,如果未能解决你的问题,请参考以下文章

opencv如何实现视频连续播放

python-----opencv显示指定大小并按键实现暂停播放

OpenCV+Qt实现简易视频播放器——支持进度条拖动

python opencv多路视频畸变矫正与显示

基于opencv,开发摄像头播放程序

方便的Opencv实现播放有声音的视频+附带图片生成gif