热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Window10OpenCV打开罗技(Logitech)摄像头速度慢问题解决

采用最新版OpenCV4.7.0摄像头对罗技摄像头进行视频图像抓取时,发现存在打开摄像头问题。测试环境如下:系统Windows10专业版CPUInt

采用最新版OpenCV 4.7.0 摄像头对罗技摄像头进行视频图像抓取时,发现存在打开摄像头问题。

测试环境如下:

系统Windows 10 专业版
CPUIntel i7-7700K @ 4.20GHz 
摄像头型号罗技Logitech C930c 网络摄像头
OpenCV版本4.7.0
语言C++

测试结果表明:

官网编译好的OpenCV 4.7.0库,可以用cv::CAP_ANY(默认)及cv::CAP_DSHOW等方式打开摄像头并抓取图像,摄像头打开时间为2~5秒,图像帧的分辨率越高,打开时间越长。

官网编译好的OpenCV库无法采用cv::CAP_MSMF方式打开摄像头,需要自己编译。

在编译时,需要勾选上“WITH_MSMF”。

在采用cv::CAP_MSMF打开摄像头时,需要先声明环境变量以提高摄像头加载速度。

_putenv("OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS=0");

摄像头打开时间缩短到0.3秒左右。

完整代码如下:

#include
#include
#include
int main()
{
_putenv("OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS=0");
int camIndex = 0;
int outputWidth = 1920;
int outputHeight = 1080;
cv::VideoCapture camera_capture;
camera_capture.open(camIndex, cv::CAP_MSMF);
camera_capture.set(cv::CAP_PROP_FRAME_WIDTH, outputWidth);
camera_capture.set(cv::CAP_PROP_FRAME_HEIGHT, outputHeight);

if (!camera_capture.isOpened()) {
std::cerr <<"ERROR! Unable to open camera\n";
return -1;
}
cv::Mat cam_frame_mat;
while (1)
{
camera_capture >> cam_frame_mat;
if (!cam_frame_mat.empty())
{
cv::imshow("cam_frame", cam_frame_mat);
}
if (cv::waitKey(1) &#61;&#61; 27)
break;
}
return 0;
}

另外解决方案供参考&#xff1a;

1. 采用ffmpeg抓取并通过回调函数将图像帧数据传出&#xff1b;

2. 采用Windows系统自带的Media Fondation库抓取摄像头图像。


推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
很想爱到极限
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有