关于opencv读取摄像头1080P的测试

最近测试了一下opencv自带的函数读取高清摄像头,究竟能不能做到实时读取?我先是百度了一下,网上很多读取1080p的例子,好像是可以。所以用单位的摄像头做了一个测试,结果如下:

1 opencv读取1920*1080的视频流。帧率只能达到 7.3帧/s

2 用DShow显示的话,帧率可以达到15帧/s

测试用的是同一个摄像头,不知道和摄像头有没有关系。

此次测试结果和我预想的有点差距,我感觉opencv应该可以做到实时读取1080P的视频流。在此先记录一下,如果测试过程有误请指正。

代码如下:

videoCapture读取:

void CMFCDShowDlg::OnBnClickedButopen2()
{
	VideoCapture capture;
	capture.open(0);
	capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
	capture.set(CAP_PROP_FRAME_WIDTH, 1920);
	capture.set(CAP_PROP_FRAME_HEIGHT, 1080);
	Mat frame0;
	Mat gray;
	int nframe = 0;
	float fps;
	DWORD time2;
	DWORD time1 = GetTickCount();
	while (1)
	{
		capture.read(frame0);
		cvtColor(frame0, gray, CV_RGB2GRAY);
		
		nframe++;
		time2 = GetTickCount();
		double seconds = (time2 - time1) / 1000.0;
		fps = nframe / seconds;
		TRACE("Estimated frames per second : %f /s \r\n", fps);

		imwrite("f://img//ds1.jpg", gray);
		//显示
		cv::imshow("camera", gray);
		
		if (cvWaitKey(20) == 27)
			break;
	}

	frame0.release();
	gray.release();
}

关于opencv读取摄像头1080P的测试_第1张图片

 

DShow读取:

void CMFCDShowDlg::OnBnClickedButton1()
{
	if (m_cameranum == 0)
		return;

	CCameraDS camera;
	

	//打开第一个摄像头 //弹出属性选择窗口
	if (!camera.OpenCamera(0, true))
	{
		fprintf(stderr, "Can not open camera.\n");
		return;
	}
	//if (!camera.OpenCamera(0, false, 640, 480)) //不弹出属性选择窗口,用代码制定图像宽和高
	//{
		//fprintf(stderr, "Can not open camera.\n");
		//return;
	//}

	int tt = 0, ltt = 0;
	cv::namedWindow("camera");
	int et = -13;
	int nframe = 0;
	float fps;
	DWORD time2;
	DWORD time1 = GetTickCount();
	while (1)
	{
		//camera.SetExposure(et);
		//获取一帧
		IplImage *pFrame = camera.QueryFrame();
		//std::cout<<"size = "<imageSize<imageData);
		cv::Mat grey(1080, 1920, CV_8UC1);
		cvtColor(frame, grey, CV_RGB2GRAY);

		nframe++;
		time2 = GetTickCount();
		double seconds = (time2 - time1) / 1000.0;
		fps = nframe / seconds;
		TRACE("Estimated frames per second : %f /s \r\n", fps);

		cv::flip(grey, grey, 1);
		imwrite("f://img//ds0.jpg",grey);
		//显示
		cv::imshow("camera", grey);
		et++;
		if (cvWaitKey(2) == 27)
			break;
	}
	camera.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头

	cvDestroyWindow("camera");
}

关于opencv读取摄像头1080P的测试_第2张图片

关于opencv读取摄像头1080P的测试_第3张图片 

 

你可能感兴趣的:(opencv,人工智能,c++)