opencv 在飞行堡垒8中调用camera导致设备消失

简介

使用 OpenCV 库时, 在最后调用cv::destroyAllWindows()之后设备管理器中的摄像头设备消失了, 看看是怎么触发的, 后面再慢慢研究RootCause是什么。

步骤

设备管理器原来摄像头显示
在这里插入图片描述

1. 代码

main.cpp
Note: 
1. haarcascade_frontalface_default.xml 在编译的opencv目录下可以找到 
2. 源码缺少就注释掉就可以, 缺少部分是保存图像的,不影响。
#include <opencv2/opencv.hpp>
#include <iostream>
#include "base.h"using namespace cv;
using namespace std;string gTempFileName;void humanface(Mat &image)
{// 2. 转换为灰度图Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);if (opencv_SaveImage(gray, gTempFileName)){cout << "gray save to " << gTempFileName << endl;}// 3. 加载级联分类器CascadeClassifier face_cascade;// face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_alt.xml");// face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_alt2.xml");face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_default.xml");// 4. 检测人脸std::vector<Rect> faces;double scale_factor = 1.1;int min_neighbors = 3;Size min_size(30, 30);Size max_size(0, 0);face_cascade.detectMultiScale(gray, faces, scale_factor, min_neighbors, 0 | CASCADE_SCALE_IMAGE, min_size, max_size);// 5. 绘制矩形框for (size_t i = 0; i < faces.size(); i++) {Rect face_rect = faces[i];rectangle(image, face_rect, Scalar(255, 0, 0), 2, 8, 0);cout << i << endl;}if (opencv_SaveImage(image, gTempFileName)){cout << "rect save to " << gTempFileName << endl;}
}int main()
{VideoCapture cap(0);Mat img;if(!cap.isOpened()) { // 检查摄像头是否成功打开cerr << "Error: Cannot open camera" << endl;return -1;}while (true) {cap.read(img);if(img.empty()){cerr << "Could not read the image" << endl;break; // 如果无法读取图像,则退出循环}humanface(img);imshow("Image", img);// 等待任意键按下,时间设置为 1ms,这样程序可以快速响应按键int key = waitKey(1);cout<<key<<endl;if(key == 27) { // 如果按下的是 ESC 键 (ASCII 码为 27)break; // 退出循环}}// 释放 VideoCapture 对象cap.release();cv::destroyAllWindows();return 0;
}

2. 运行代码

  1. 第一次 正常打开摄像头并且使用;
  2. 再次运行时出现无法打开摄像头, 设备管理器没有摄像头设备
    Error: Cannot open camera
    需要注意的是, 接上有线耳机线, 出现概率高, 不接耳机线很难出现(有出现过一次,后面没再重现,再后面发现跟当时使用录屏软件,Camtasia这个软件应该有音频操作吧)。
    在这里插入图片描述

3. 不接耳机线反复测试

一百次并没有出现问题。

OpenCV 配置文件

下面是编译OpenCV源码时的设置
cvconfig.h 位于编译后的include/opencv2/cvconfig.h,
这里提供这个文件是考虑编译参数可能会有不一样的结果, 所以可能你的不会出现, 或者PC的缘故, 所以尽可能陈述更多消息方便进行交叉比较。

#ifndef OPENCV_CVCONFIG_H_INCLUDED
#define OPENCV_CVCONFIG_H_INCLUDED/* OpenCV compiled as static or dynamic libs */
#define BUILD_SHARED_LIBS/* OpenCV intrinsics optimized code */
#define CV_ENABLE_INTRINSICS/* OpenCV additional optimized code */
/* #undef CV_DISABLE_OPTIMIZATION *//* Compile for 'real' NVIDIA GPU architectures */
#define CUDA_ARCH_BIN ""/* NVIDIA GPU features are used */
#define CUDA_ARCH_FEATURES ""/* Compile for 'virtual' NVIDIA PTX architectures */
#define CUDA_ARCH_PTX ""/* AMD's Basic Linear Algebra Subprograms Library*/
/* #undef HAVE_CLAMDBLAS *//* AMD's OpenCL Fast Fourier Transform Library*/
/* #undef HAVE_CLAMDFFT *//* Clp support */
/* #undef HAVE_CLP *//* NVIDIA CUDA Runtime API*/
/* #undef HAVE_CUDA *//* NVIDIA CUDA Basic Linear Algebra Subprograms (BLAS) API*/
/* #undef HAVE_CUBLAS *//* NVIDIA CUDA Deep Neural Network (cuDNN) API*/
/* #undef HAVE_CUDNN *//* NVIDIA CUDA Fast Fourier Transform (FFT) API*/
/* #undef HAVE_CUFFT *//* DirectX */
#define HAVE_DIRECTX
#define HAVE_DIRECTX_NV12
#define HAVE_D3D11
#define HAVE_D3D10
#define HAVE_D3D9/* Eigen Matrix & Linear Algebra Library */
/* #undef HAVE_EIGEN *//* Geospatial Data Abstraction Library */
/* #undef HAVE_GDAL *//* Halide support */
/* #undef HAVE_HALIDE *//* Vulkan support */
/* #undef HAVE_VULKAN *//* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1/* Intel Integrated Performance Primitives */
/* #undef HAVE_IPP */
/* #undef HAVE_IPP_ICV */
/* #undef HAVE_IPP_IW */
/* #undef HAVE_IPP_IW_LL *//* JPEG-2000 codec */
#define HAVE_OPENJPEG
/* #undef HAVE_JASPER *//* AVIF codec */
/* #undef HAVE_AVIF *//* IJG JPEG codec */
#define HAVE_JPEG/* GDCM DICOM codec */
/* #undef HAVE_GDCM *//* NVIDIA Video Decoding API*/
/* #undef HAVE_NVCUVID */
/* #undef HAVE_NVCUVID_HEADER */
/* #undef HAVE_DYNLINK_NVCUVID_HEADER *//* NVIDIA Video Encoding API*/
/* #undef HAVE_NVCUVENC *//* OpenCL Support */
#define HAVE_OPENCL
/* #undef HAVE_OPENCL_STATIC */
/* #undef HAVE_OPENCL_SVM *//* NVIDIA OpenCL D3D Extensions support */
#define HAVE_OPENCL_D3D11_NV/* OpenEXR codec */
#define HAVE_OPENEXR/* OpenGL support*/
/* #undef HAVE_OPENGL *//* PNG codec */
#define HAVE_PNG/* PNG codec */
/* #undef HAVE_SPNG *//* Posix threads (pthreads) */
#define HAVE_PTHREAD/* parallel_for with pthreads */
#define HAVE_PTHREADS_PF/* Intel Threading Building Blocks */
/* #undef HAVE_TBB *//* Ste||ar Group High Performance ParallelX */
/* #undef HAVE_HPX *//* TIFF codec */
#define HAVE_TIFF/* Define if your processor stores words with the most significant bytefirst (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN *//* VA library (libva) */
/* #undef HAVE_VA *//* Intel VA-API/OpenCL */
/* #undef HAVE_VA_INTEL *//* Lapack */
/* #undef HAVE_LAPACK *//* Library was compiled with functions instrumentation */
/* #undef ENABLE_INSTRUMENTATION *//* OpenVX */
/* #undef HAVE_OPENVX *//* OpenCV trace utilities */
#define OPENCV_TRACE/* Library QR-code decoding */
/* #undef HAVE_QUIRC */#endif // OPENCV_CVCONFIG_H_INCLUDED

总结

初步怀疑是跟硬件相关, 毕竟飞行堡垒8硬件问题很多。
出现问题后面研究发现
1. 接入有线耳机时会触发问题。
2. 使用录屏软件正在录屏时出现问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cocos入门9:三维向量点乘

在cocos creator中&#xff0c;三维向量的点乘&#xff08;Dot Product&#xff09;是一个基础但重要的概念&#xff0c;特别是在3D图形学、物理模拟和光照计算等领域。点乘的结果是一个标量&#xff08;scalar&#xff09;&#xff0c;它描述了两个向量之间的角度关系以及其中…

AI智能客服经验总结

AI智能客服经验总结 在使用OpenAI的API接口来构建人工智能客服系统时&#xff0c;prompt约束是非常重要的。它可以帮助确保生成的回复符合你的期望和需求。以下是一些关于如何设置和管理prompt约束的建议&#xff1a; 1. 明确客服系统的目标 首先&#xff0c;明确你的客服系…

python中的解包操作(*和**)

在Python中&#xff0c;* 和 ** 用于函数定义和函数调用时的参数解包和传递&#xff0c;它们有不同的用途和作用。以下是它们的详细解释和区别&#xff1a; 单星号 (*) 1. 位置参数解包&#xff08;函数调用&#xff09; 在函数调用时&#xff0c;* 用于将列表或元组解包成位…

R语言 | 使用最简单方法添加显著性ggpubr包

本期教程原文&#xff1a;使用最简单方法添加显著性ggsignif包 本期教程 获得本期教程代码和数据&#xff0c;在后台回复关键词&#xff1a;20240605 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游…

容声冰箱正式发布主动除菌净味白皮书,守护家人饮食健康

近日&#xff0c;由中国家用电器研究院指导、全国家用电器工业信息中心和容声冰箱联合编制的《冰箱主动除菌净味技术发展白皮书》&#xff08;下称《白皮书》&#xff09;正式发布。 《白皮书》指出&#xff0c;容声将IDP主动除菌技术应用到冰箱冷冻、冷藏区域&#xff0c;实现…

使用本地锁syncronized防止缓存击穿

谷粒商城学习笔记p156 缓存击穿&#xff1a;单个key缓存突然失效&#xff0c;这时大量的请求进行访问&#xff0c;导致数据库压力过大。缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期)&#xff0c;这时由于并发用户特别多&#xff0c;同时读缓存没读到数据&am…

对待谷歌百度等搜索引擎的正确方式

对待百度、谷歌等搜索引擎的方式是&#xff0c;你要站在搜索引擎之上&#xff0c;保持自己的独立思想和意见。 当谷歌宣布他们将会根据一个名为“Alphabet”的新控股公司来进行业务调整时&#xff0c;在科技界引起了一片恐慌之声。 永远不要说这是一个公司一直在做的事情。不…

一文快速搞懂Nginx —— Nginx 详解

一文快速搞懂Nginx 一、nginx 简介二、正向 / 反向代理2.1 正向代理2.2 反向代理三、负载均衡四、动静分离五、web 缓存六、Nginx 安装6.1 windows版本下的安装6.2 Linux版本下的安装七、常用命令八、为什么选择Nginx 一、nginx 简介 Nginx 同 Apache 一样都是一种 Web 服务器。…

使用 Python 的 Tkinter 来创建 GUI 应用程序

Tkinter 是 Python 自带的一个图形用户界面&#xff08;GUI&#xff09;工具包&#xff0c;它提供了丰富的 GUI 组件和工具&#xff0c;可以用于快速开发各种应用程序 安装和导入 Tkinter 首先&#xff0c;需要确保你已经安装了 Python&#xff0c;并且版本号在 3.0 及以上&a…

嵌入式Linux系统编程 — 3.1 Linux系统中的文件类型

目录 1 Linux 系统中的文件类型简介 2 普通文件 2.1 什么是普通文件 2.2 普通文件分类 3 目录文件 4 字符设备文件和块设备文件 4.1 什么是设备文件 4.2 查看设备文件的方法&#xff1a; 5 符号链接文件&#xff08;link&#xff09; 5.1 什么是符号链接文件 5.2 如…

大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图&#xff0c;而在常见的使用大模型进行多轮对话方式中&#xff0c;我接触到的只有两种方式&#xff1a; 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…

光伏电站绘制软件的基本方法

随着可再生能源的快速发展&#xff0c;光伏电站的建设日益受到重视。为了提高光伏电站设计的效率和准确性&#xff0c;光伏电站绘制软件的应用变得至关重要。本文将介绍光伏电站绘制软件的基本方法&#xff0c;包括绘制屋顶、屋脊、障碍物和参照物&#xff0c;铺设光伏板&#…

FreeRTOS 阻塞式I2C操作异常 I2C_WaitOnFlagUntilTimeout规避

I2C_WaitOnFlagUntilTimeout 是一个在STM32的HAL库中用于等待I2C操作完成的函数。FreeRTOS是一个可以运行在嵌入式系统上的实时操作系统。在FreeRTOS中&#xff0c;如果你想要实现I2C操作的阻塞式等待&#xff0c;可以使用I2C_WaitOnFlagUntilTimeout函数。 但是&#xff0c;F…

typedef和define的区别

在C语言中&#xff0c;typedef和define都是用来创建别名以增强代码的可读性和可维护性&#xff0c;它们在**执行时间、作用域和功能**等方面存在差异。具体如下&#xff1a; 1. **执行时间** - **typedef**&#xff1a;处理于编译阶段&#xff0c;因此具备类型检查的功能Θic-1…

PCL Loess曲线回归拟合(二维)

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 LOESS(局部加权回归)回归的原理是基于非参数方法,它主要用于描述两个变量之间复杂的、非线性的关系。LOESS方法的核心在于“局部”和“加权”。它会在每个数据点附近选取一个子集(或称为窗口),并利用这个子集…

使用Python编写Ping监测程序

Ping是一种常用的网络诊断工具&#xff0c;它可以测试两台计算机之间的连通性&#xff1b; 如果您需要监测某个IP地址的连通情况&#xff0c;可以使用Python编写一个Ping监测程序&#xff1b; 本文将介绍如何使用Python编写Ping监测程序 首先&#xff0c;需要导入os、sys、t…

spark复习

第一章 1.​大数据特点:4V 2.​大数据计算模式 3.​hadoop生态系统 4.​spark提供了内存计算和基于DAG的任务调度机制&#xff0c;遵循一个软件栈满足不同应用场景的理念。 5.​hadoop中MapReduce计算框架的缺点&#xff0c;对应的spark的优点 第二章 1.​spark生态系统 …

HTML做成一个炫酷跳动爱心的页面

大家好&#xff0c;今天制作制作一个炫酷跳动爱心的页面&#xff01; 先看具体效果&#xff1a; 要创建一个炫酷跳动爱心的HTML页面&#xff0c;你可以使用HTML、CSS和JavaScript的组合。以下是一个简单的示例&#xff0c;它使用CSS动画和JavaScript来实现跳动效果。 首先&…

vue项目中oss网络图片无法显示的问题

问题说明 如果后台给你烦返回了oss地址的图片,也许会出现如下情况 在图片路径无误的情况下,图片无法正常预览和回显 但是在浏览器中打开却没问题 解决方案 就需要在项目的index.html中做出如下配置,便能正常回显 <meta name"referrer" content"no-referr…

将二叉排序树转换成双向链表--c++【做题记录】

【问题描述】 编写程序在不增加结点的情况下&#xff0c;将二叉排序树转换成有序双向链表&#xff08;如下图&#xff09;。 链表创建结束后&#xff0c;按照从前往后的顺序输出链表中结点的内容。 【输入输出】 【输入形式】 第一行输入数字n&#xff0c;第二行输入n个整数…