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

本文通过对比测试,展示了使用Opencv读取1920*1080分辨率视频流时的帧率表现,并与DShow进行对比。结果显示Opencv在同样条件下帧率为7.3帧/s,而DShow能达到15帧/s。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近测试了一下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();
}

 

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 = "<<pFrame->imageSize<<std::endl;
		cv::Mat frame(1080, 1920, CV_8UC3, pFrame->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");
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值