当前位置: 首页 > news >正文

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

相关文章:

  • 纹理贴图必须要输入顶点坐标或纹理坐标吗
  • 如何免费获取云服务器
  • Vue09-事件处理
  • 【鸿蒙开发】HarmonyOS开发 URL动态路由设计
  • Mac环境下,简单反编译APK
  • 探索未来制造,BFT Robotics引领潮流
  • Flink SQL实践
  • Python 机器学习 基础 之 【实战案例】中药数据分析项目实战
  • 自动化机械臂喷涂生产线方案五
  • 电子电气架构 —— 刷写模式:并行刷写
  • mysql中 redo日志(下)
  • 手撸 串口交互命令行 及 AT应用层协议解析框架
  • 北航第四次数据结构与程序设计编程题复习
  • 宝塔面板和 LNMP 环境下反代 HFish 蜜罐平台的正确方法
  • Spring Boot 复习
  • canvas 五子棋游戏
  • CSS居中完全指南——构建CSS居中决策树
  • iOS | NSProxy
  • python 学习笔记 - Queue Pipes,进程间通讯
  • QQ浏览器x5内核的兼容性问题
  • yii2中session跨域名的问题
  • 从0实现一个tiny react(三)生命周期
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • No resource identifier found for attribute,RxJava之zip操作符
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (初研) Sentence-embedding fine-tune notebook
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)四层和七层负载均衡的区别
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CLR基本术语
  • .net web项目 调用webService
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /boot 内存空间不够
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [20150629]简单的加密连接.txt
  • [2016.7.Test1] T1 三进制异或
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [android] 练习PopupWindow实现对话框
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [cogs2652]秘术「天文密葬法」
  • [CSS]文字旁边的竖线以及布局知识