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

农妇山泉一亩田  金牌会员 | 2024-6-25 03:03:07 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 810|帖子 810|积分 2430

简介

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

装备管理器原来摄像头显示

1. 代码

  1. main.cpp
  2. Note:
  3. 1. haarcascade_frontalface_default.xml 在编译的opencv目录下可以找到
  4. 2. 源码缺少就注释掉就可以, 缺少部分是保存图像的,不影响。
复制代码
  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. #include "base.h"
  4. using namespace cv;
  5. using namespace std;
  6. string gTempFileName;
  7. void humanface(Mat &image)
  8. {
  9.     // 2. 转换为灰度图
  10.     Mat gray;
  11.     cvtColor(image, gray, COLOR_BGR2GRAY);
  12.     if (opencv_SaveImage(gray, gTempFileName))
  13.     {
  14.         cout << "gray save to " << gTempFileName << endl;
  15.     }
  16.     // 3. 加载级联分类器
  17.     CascadeClassifier face_cascade;
  18.     // face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_alt.xml");
  19.     // face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_alt2.xml");
  20.     face_cascade.load("E:/Workspace/Qt/opencv_demos/images/haarcascade_frontalface_default.xml");
  21.     // 4. 检测人脸
  22.     std::vector<Rect> faces;
  23.     double scale_factor = 1.1;
  24.     int min_neighbors = 3;
  25.     Size min_size(30, 30);
  26.     Size max_size(0, 0);
  27.     face_cascade.detectMultiScale(gray, faces, scale_factor, min_neighbors, 0 | CASCADE_SCALE_IMAGE, min_size, max_size);
  28.     // 5. 绘制矩形框
  29.     for (size_t i = 0; i < faces.size(); i++) {
  30.         Rect face_rect = faces[i];
  31.         rectangle(image, face_rect, Scalar(255, 0, 0), 2, 8, 0);
  32.         cout << i << endl;
  33.     }
  34.     if (opencv_SaveImage(image, gTempFileName))
  35.     {
  36.         cout << "rect save to " << gTempFileName << endl;
  37.     }
  38. }
  39. int main()
  40. {
  41.     VideoCapture cap(0);
  42.     Mat img;
  43.     if(!cap.isOpened()) { // 检查摄像头是否成功打开
  44.         cerr << "Error: Cannot open camera" << endl;
  45.         return -1;
  46.     }
  47.     while (true) {
  48.         cap.read(img);
  49.         if(img.empty()){
  50.             cerr << "Could not read the image" << endl;
  51.             break; // 如果无法读取图像,则退出循环
  52.         }
  53.         humanface(img);
  54.         imshow("Image", img);
  55.         // 等待任意键按下,时间设置为 1ms,这样程序可以快速响应按键
  56.         int key = waitKey(1);
  57.         cout<<key<<endl;
  58.         if(key == 27) { // 如果按下的是 ESC 键 (ASCII 码为 27)
  59.             break; // 退出循环
  60.         }
  61.     }
  62.     // 释放 VideoCapture 对象
  63.     cap.release();
  64.     cv::destroyAllWindows();
  65.     return 0;
  66. }
复制代码
2. 运行代码


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

3. 不接耳机线反复测试

一百次并没有出现题目。
OpenCV 配置文件

下面是编译OpenCV源码时的设置
cvconfig.h 位于编译后的include/opencv2/cvconfig.h,
这里提供这个文件是考虑编译参数可能会有不一样的效果, 以是可能你的不会出现, 大概PC的缘故, 以是尽可能陈述更多消息方便举行交叉比较。
  1. #ifndef OPENCV_CVCONFIG_H_INCLUDED
  2. #define OPENCV_CVCONFIG_H_INCLUDED
  3. /* OpenCV compiled as static or dynamic libs */
  4. #define BUILD_SHARED_LIBS
  5. /* OpenCV intrinsics optimized code */
  6. #define CV_ENABLE_INTRINSICS
  7. /* OpenCV additional optimized code */
  8. /* #undef CV_DISABLE_OPTIMIZATION */
  9. /* Compile for 'real' NVIDIA GPU architectures */
  10. #define CUDA_ARCH_BIN ""
  11. /* NVIDIA GPU features are used */
  12. #define CUDA_ARCH_FEATURES ""
  13. /* Compile for 'virtual' NVIDIA PTX architectures */
  14. #define CUDA_ARCH_PTX ""
  15. /* AMD's Basic Linear Algebra Subprograms Library*/
  16. /* #undef HAVE_CLAMDBLAS */
  17. /* AMD's OpenCL Fast Fourier Transform Library*/
  18. /* #undef HAVE_CLAMDFFT */
  19. /* Clp support */
  20. /* #undef HAVE_CLP */
  21. /* NVIDIA CUDA Runtime API*/
  22. /* #undef HAVE_CUDA */
  23. /* NVIDIA CUDA Basic Linear Algebra Subprograms (BLAS) API*/
  24. /* #undef HAVE_CUBLAS */
  25. /* NVIDIA CUDA Deep Neural Network (cuDNN) API*/
  26. /* #undef HAVE_CUDNN */
  27. /* NVIDIA CUDA Fast Fourier Transform (FFT) API*/
  28. /* #undef HAVE_CUFFT */
  29. /* DirectX */
  30. #define HAVE_DIRECTX
  31. #define HAVE_DIRECTX_NV12
  32. #define HAVE_D3D11
  33. #define HAVE_D3D10
  34. #define HAVE_D3D9
  35. /* Eigen Matrix & Linear Algebra Library */
  36. /* #undef HAVE_EIGEN */
  37. /* Geospatial Data Abstraction Library */
  38. /* #undef HAVE_GDAL */
  39. /* Halide support */
  40. /* #undef HAVE_HALIDE */
  41. /* Vulkan support */
  42. /* #undef HAVE_VULKAN */
  43. /* Define to 1 if you have the <inttypes.h> header file. */
  44. #define HAVE_INTTYPES_H 1
  45. /* Intel Integrated Performance Primitives */
  46. /* #undef HAVE_IPP */
  47. /* #undef HAVE_IPP_ICV */
  48. /* #undef HAVE_IPP_IW */
  49. /* #undef HAVE_IPP_IW_LL */
  50. /* JPEG-2000 codec */
  51. #define HAVE_OPENJPEG
  52. /* #undef HAVE_JASPER */
  53. /* AVIF codec */
  54. /* #undef HAVE_AVIF */
  55. /* IJG JPEG codec */
  56. #define HAVE_JPEG
  57. /* GDCM DICOM codec */
  58. /* #undef HAVE_GDCM */
  59. /* NVIDIA Video Decoding API*/
  60. /* #undef HAVE_NVCUVID */
  61. /* #undef HAVE_NVCUVID_HEADER */
  62. /* #undef HAVE_DYNLINK_NVCUVID_HEADER */
  63. /* NVIDIA Video Encoding API*/
  64. /* #undef HAVE_NVCUVENC */
  65. /* OpenCL Support */
  66. #define HAVE_OPENCL
  67. /* #undef HAVE_OPENCL_STATIC */
  68. /* #undef HAVE_OPENCL_SVM */
  69. /* NVIDIA OpenCL D3D Extensions support */
  70. #define HAVE_OPENCL_D3D11_NV
  71. /* OpenEXR codec */
  72. #define HAVE_OPENEXR
  73. /* OpenGL support*/
  74. /* #undef HAVE_OPENGL */
  75. /* PNG codec */
  76. #define HAVE_PNG
  77. /* PNG codec */
  78. /* #undef HAVE_SPNG */
  79. /* Posix threads (pthreads) */
  80. #define HAVE_PTHREAD
  81. /* parallel_for with pthreads */
  82. #define HAVE_PTHREADS_PF
  83. /* Intel Threading Building Blocks */
  84. /* #undef HAVE_TBB */
  85. /* Ste||ar Group High Performance ParallelX */
  86. /* #undef HAVE_HPX */
  87. /* TIFF codec */
  88. #define HAVE_TIFF
  89. /* Define if your processor stores words with the most significant byte
  90.    first (like Motorola and SPARC, unlike Intel and VAX). */
  91. /* #undef WORDS_BIGENDIAN */
  92. /* VA library (libva) */
  93. /* #undef HAVE_VA */
  94. /* Intel VA-API/OpenCL */
  95. /* #undef HAVE_VA_INTEL */
  96. /* Lapack */
  97. /* #undef HAVE_LAPACK */
  98. /* Library was compiled with functions instrumentation */
  99. /* #undef ENABLE_INSTRUMENTATION */
  100. /* OpenVX */
  101. /* #undef HAVE_OPENVX */
  102. /* OpenCV trace utilities */
  103. #define OPENCV_TRACE
  104. /* Library QR-code decoding */
  105. /* #undef HAVE_QUIRC */
  106. #endif // OPENCV_CVCONFIG_H_INCLUDED
复制代码
总结

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表