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 byte
   first (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. 使用录屏软件正在录屏时出现问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

武汉盛势启创科技携手三品软件 EDM系统助力企业图文档数字化

客户简介 武汉盛势启创科技有限公司&#xff08;以下简称“盛世启创”&#xff09;是一家专注于新能源汽车零部件领域的科技型企业&#xff0c;其主要业务涵盖新能源汽车三电系统智能传感器、智能座舱及线控底盘控制器的芯片开发、硬件设计、嵌入式系统开发。以及相关产品的生产…

云实例初始化的行业标准:Cloud-Init

01 前言 Cloud-Init[1] 是跨平台云实例初始化的行业标准。它得到了所有主要公共云提供商的支持&#xff0c;适用于私有云基础设施的配置系统以及裸机安装。Cloud-Init 将在启动时识别其运行所在的云环境&#xff0c;读取来自云端提供的任何元数据&#xff0c;并据此初始化系…

JsonCpp源码跨平台编译

1.macos编译jsoncpp: https://github.com/open-source-parsers/jsoncpp.git 克隆jsoncpp源码 使用CMake进行编译 生成makefile mkdir build cd build cmake ../ 编译: make编译并运行测试成功:

Github:ChatTTS从下载到使用

前言 本文使用工具&#xff1a; Anaconda &#xff1a;直接进行包管理&#xff0c;用来自定义生成python解释器&#xff0c;虚拟环境vscode&#xff1a;用来执行代码 注&#xff1a;我使用的Ubuntu&#xff0c;使用win&#xff0c;mac等&#xff0c;需要额外配置 简介 Chat…

python的内置模块 I

内置模块 I 除了我们自己写的模块之外&#xff0c;Python 中还内置了大量非常实用的模块。其实&#xff0c;我们之前的代码中就已经使用过几个内置模块了&#xff0c;比如 time 模块和 random 模块。 Python 的内置模块非常多&#xff0c;今天我们介绍几个常用的模块。废话少…

Linux 内存屏障简介

文章目录 1. 前言2. 什么是内存屏障&#xff1f;3. 为什么需要内存屏障&#xff1f;3.1 多发射(Multi-issuing)3.2 乱序执行(Out-of-order execution)3.3 预测执行(Speculative execution)3.4 Load-Store 优化3.5 CPU Cache3.6 编译乱序3.7 小结 4. ARM 内存一致性模型 和 内存…

Julia编程11:变量作用域 Scope of Variables

There are two main types of scopes in Julia, global* scope* and local* scope*. Julia有全局变量作用域和局部变量作用域&#xff0c;函数或者一些结构体、循环体如for等是否内部是局部环境可以参照下表。 ConstructScope typeAllowed withinmodule, baremoduleglobalglo…

商品API数据集成:一站式商品信息服务平台

一站式商品信息服务平台&#xff1a;商品API数据集成 在数字化快速发展的今天&#xff0c;信息的高效获取与整合成为了各行各业追求的核心竞争力。特别是在商品信息领域&#xff0c;如何快速、准确地获取并整合来自多个渠道的商品数据&#xff0c;为企业决策提供支持&#xff0…

【数据结构】图论——AOV和AOE(拓扑排序、存放表达式、关键活动、关键路径)

目录 AOV和AOEAOV 有向无环图及其应用(拓扑结构)有向无环图的应用——存放表达式二叉树存放表达式图存放表达式 AOE 有向无环图及其应用——关键路径1. 事件的最早发生时间事件&#xff08;顶点&#xff09;最早发生时间的计算方法&#xff1a; 2. 事件允许的最晚发生时间事件(…

JS百题斩~ typeof 、instanceof 与 Object.prototype.toString 区别(简单易懂)

首先&#xff0c;让我们先了解一下JavaScript的数据类型&#xff0c;分为两类&#xff1a; 基础类型&#xff1a;Undefined&#xff0c;Null&#xff0c;Boolean&#xff0c;Number&#xff0c;BigInt&#xff0c;String&#xff0c;Symbol 引用类型&#xff1a;Object&#xf…

网络简史-基于图论的网络

先看一幅图&#xff1a; 如图&#xff0c;我们对类似 crossbar&#xff0c;banyan tree&#xff0c;b-tree&#xff0c;10-tree&#xff0c;256-tree&#xff0c;甚至 dcn fat-tree 等 “规则拓扑” 网络相当熟悉。规则拓扑网络中&#xff0c;地址信息被编码到拓扑本身&#…

每天复习一点小CTF知识(6.4)

NSSCTF/[FSCTF 2023]夜深人静的时候也会偷偷emo 直接爆破压缩包&#xff0c;先来数字 解压好&#xff0c;一个flag.mp3 mp3隐写&#xff0c;直接干 得一个txt文件直接开

2024最新破解版CorelDRAW解锁设计新境界!

在当今快速变化的市场环境中&#xff0c;品牌之间的竞争愈发激烈。为了在众多品牌中脱颖而出&#xff0c;企业需要不断地提升自身的品牌形象和市场识别度。而在这个过程中&#xff0c;视觉设计起到了至关重要的作用。一款优秀的设计软件不仅能帮助设计师轻松地将创意想法变成现…

【全网唯一】触摸精灵iOS版纯离线本地文字识别插件

目的 触摸精灵iOS是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触摸精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要…

《平渊》· 捌 —— 「庄子」山木篇中的 “空船效应”

《平渊》 捌 "若能虚己以游世&#xff0c;其孰能害之&#xff1f;" "方舟而济于河&#xff0c;有虚船来触舟&#xff0c;虽有惼心之人而不怒&#xff1b;有一人子其上&#xff0c;则呼张歙之&#xff1b;一呼而不闻&#xff0c;再呼而不闻&#xff0c;于是三呼邪…

热烈祝贺2024年重庆市建筑电气学术年会圆满成功

芳菲四月花似锦,正是人间好时节&#xff0c;4月26日&#xff0c; 24年重庆市建筑电气学术年会在重庆维景国际大酒店举办。会议主题是“智慧 低碳 绿色 安全 ”。会上业内专家就建筑电气行业的新技术、市场趋势和未来发展展开探讨与深入交流。 本次会议邀请重庆市建筑电气行业主…

vue中实现一个时间选择器的级联框,第一层小时,第二层分钟

最近在做一个考勤系统时&#xff0c;新增班次的时候需要设置打卡时段&#xff0c;类似如下效果&#xff1a; 1、封装自定义组件Time.vue 接收参数有endHour(范围结束的小时数)、endMinute(最后一小时结束的分钟数)等&#xff0c;根据具体需求变动 <template><div&…

【代码+详解】算法题 : 最大公约数

❗❗❗必看: 下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答. ❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!! 文章目录 题目&…

低代码和零代码软件时代质量管理(QM)和质量管理系统(QMS)

【前言】 质量控制过程的目的是为了确保产品的制造标准得到保持和改进。质量控制过程使公司能够满足客户的期望&#xff0c;同时确保产品质量的一致水平。采用这些标准创造了一种公司文化&#xff0c;鼓励所有员工努力实现高质量的生产标准。低代码和零代码软件可以成为质量控…

6.4学习总结

Codeforces Round 950 (Div. 3)A、B题解 解题思路 开一个数组来记录A,B,C,D,E,F,G难度题目出现的次数&#xff0c;因为每一轮比赛都需要每一种难度都有一题&#xff0c;所以我们只要根据要出的比赛的轮数对每一个难度的题目进行自减&#xff0c;最后遍历数组把所有为负数的题目…