opencv打开摄像头很慢的解决方法

通常我们在c++中使用opencv通过如下代码来打开摄像头,摄像头的分辨率越高,打开越慢,通常在640×480的分辨率下打开延迟不明显。

	cv::VideoCapture cap(1);//1表示摄像头索引
	cap.set(cv::CAP_PROP_FRAME_WIDTH, 1920); // 设置宽度为 1920 像素
	cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1080); // 设置高度为 1080 像素
	cap.set(cv::CAP_PROP_FPS, 60); // 设置帧率为 60

只需要将cv::VideoCapture cap(1);改成cv::VideoCapture cap(1,cv::CAP_DSHOW);即可快速打开摄像头。其中,cv::CAP_DSHOW表示使用系统的DirectShow组件的接口访问摄像头。

1920×1080的摄像头原本需要5~7秒才能打开,增加上述代码后,只需1s左右。

DirectShow是Windows平台上的多媒体框架,本代码仅仅在windows系统下,进行过测试,其他系统未做测试。另外在Python中,使用opencv和DirectShow进行视频捕需要借助第三方库pywin32。

以下是在Windows系统使用opencv c++打开摄像头并显示实时画面的代码:

#include <opencv2/opencv.hpp>
int main()
{
	cv::VideoCapture cap(0,cv::CAP_DSHOW);//0表示摄像头索引,一般笔记本电脑摄像头索引为0
      //外接第一个摄像头索引为1,台式机没有摄像头,则外接第一个摄像头的索引为0
  	  cap.set(cv::CAP_PROP_FRAME_WIDTH, 640); // 设置宽度为 640 像素
	  cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480); // 设置高度为 480 像素
	  cap.set(cv::CAP_PROP_FPS, 30); // 设置帧率为 30
		
	  while (true)
	  {
		cv::Mat frame;
		cap.read(frame);
		cv::imshow("Camera", frame);
		if (cv::waitKey(1) == 27)
			break;//按ESC退出
	  }
	  cap.release();
	  cv::destroyAllWindows();
	  return 0;
}

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值