🏕️树莓派 camera 操作笔记-9 opencv 编译 GUI 库认识
2023-6-21
| 2023-6-21
0  |  0 分钟
type
status
date
Jun 21, 2023 09:35 AM
slug
summary
tags
category
icon
password

参考解释这段代码的介绍 opencv_face_detect.py

这段Python代码使用OpenCV和Picamera2库来捕获摄像头图像,并在其中检测并标注出人脸。
具体功能描述如下:
  1. 导入所需库:该程序首先导入OpenCV(用于图像处理和计算机视觉)和Picamera2(用于控制Raspberry Pi上的摄像头)。
  1. 加载人脸检测模型:然后,使用OpenCV的CascadeClassifier加载一个预训练的人脸检测模型。这个模型是一个Haar级联分类器,用于检测图像中的前脸。
  1. 配置摄像头:接着,创建一个Picamera2对象,并使用特定的配置参数启动它。这里的配置使摄像头以'XRGB8888'格式(一种32位颜色格式,包括24位RGB颜色和8位填充)和640x480的分辨率输出预览图像。
  1. 循环捕获和处理图像:在一个无限循环中,程序首先使用Picamera2的capture_array方法捕获一帧图像。然后,将该图像转换为灰度图(因为人脸检测通常在灰度图上进行)。接下来,使用加载的人脸检测模型在灰度图上检测人脸。
  1. 绘制人脸矩形:对于检测到的每一个人脸,程序在原始图像(不是灰度图)上绘制一个矩形。这个矩形的左上角位于(x, y),宽度和高度分别为w和h。矩形的颜色设为绿色(在RGB颜色空间中,绿色表示为(0, 255, 0))。
  1. 显示结果:最后,使用OpenCV的imshow方法在一个名为"Camera"的窗口中显示处理后的图像(包含标注人脸的矩形)。在每一帧中,程序都会更新这个窗口的内容。
注意,这个程序将一直运行,直到你强制停止它。在实际应用中,你可能需要添加一个退出条件或异常处理来优雅地结束程序。
 

这个cv2.startWindowThread()窗口是QTGL程序还是 QT 程序或者是DRM 程序

 
 

我是 python 版本的 opencv,怎么知道编译 OpenCV 时的配置选项

在Python中,你可以使用以下的代码行来查看OpenCV的构建信息,包括它是如何被编译的:
 
当你运行这段代码,你会看到一个详细的构建信息列表,包括使用的编译器、启用的特性、包含的模块等等。你可以在这个列表中查找"GUI"部分,看看OpenCV是否与QT或者其它GUI库一起编译,以及是否启用了OpenGL等特性。这可以帮助你确定cv2.startWindowThread()打开的窗口是什么类型的。 请注意,Python的OpenCV包(pip安装的opencv-python和opencv-python-headless)是预编译的,因此它们的构建配置是固定的。例如,opencv-python包是与GTK+2一起编译的,不支持QT或OpenGL。如果你需要使用特定的构建配置,你可能需要自己从源码编译OpenCV。 U 按照你的指导, "GUI"部分输出如下, 那我的 opencv 是用的哪个 GUI 后端 . ``` GUI: GTK+: YES (ver 3.24.24) GThread : YES (ver 2.66.8) GtkGlExt: NO OpenGL support: NO VTK support: YES (ver 9.0.1)``` 从你提供的构建信息来看,你的OpenCV版本是使用GTK+ 3(版本3.24.24)作为其GUI后端进行编译的。这意味着你的OpenCV创建的窗口和与之相关的事件处理都是基于GTK+实现的。 你的OpenCV构建信息中也指出,OpenGL支持为NO,这表示OpenCV不支持OpenGL相关的特性。此外,尽管你的OpenCV版本支持VTK(一种用于3D计算机图形、图像处理和可视化的软件系统),但这与OpenCV的窗口创建和事件处理无关。 总的来说,你的OpenCV版本是使用GTK+作为GUI后端的。
 

如何安装完整版本的 opencv python 版本

  1. a. Packages for standard desktop environments (Windows, macOS, almost any GNU/Linux distribution)
      • Option 1 - Main modules package: pip install opencv-python
      • Option 2 - Full package (contains both main modules and contrib/extra modules): pip install opencv-contrib-python (check contrib/extra modules listing from OpenCV documentation)
      b. Packages for server (headless) environments (such as Docker, cloud environments etc.), no GUI library dependencies
      These packages are smaller than the two other packages above because they do not contain any GUI functionality (not compiled with Qt / other GUI components). This means that the packages avoid a heavy dependency chain to X11 libraries and you will have for example smaller Docker images as a result. You should always use these packages if you do not use cv2.imshow et al. or you are using some other package (such as PyQt) than OpenCV to create your GUI.
      • Option 3 - Headless main modules package: pip install opencv-python-headless
      • Option 4 - Headless full package (contains both main modules and contrib/extra modules): pip install opencv-contrib-python-headless (check contrib/extra modules listing from OpenCV documentation)
 
但在PiCamera2 Library chapter 2.6.1 中, 却是通过 apt install -y python3-opencv, apt install opencv-data 的方式安装的, 安装结果如上面的参数, 只有 GTK+.
 

各种 GUI 后端: GTK, QT, Win32, QTGL.

OpenCV 支持多种不同的 GUI 后端,包括 GTK,QT,Win32,等等。其中 QT 后端支持 OpenGL 渲染,因此有可能是 QTGL 程序。
其中 DRM 程序是在 terminal 跑的, 不算 GUI.
如下是 win 查看的结果 demo:
工作学习
  • 开发
  • 图像编程
  • Raspberry
  • 哎, 遇到个郑州的小骗子, 最终完整开盒How to Pronounce Front & Central Vowels e æ ʌ - British English RP
    目录