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

开源手机网站模板网站需求分析文档

开源手机网站模板,网站需求分析文档,seo sem培训,wordpress4.7.2 xss1、OpenCV的后端是什么? 在 OpenCV 里,“后端”通常指Video I/O(VideoCapture、VideoWriter)或 GUI(HighGUI)真正依赖的底层实现,而不是说整个 OpenCV 库本身有一个统一的“后端”。换句话说&a…

1、OpenCV的后端是什么?

在 OpenCV 里,“后端”通常指Video I/O(VideoCaptureVideoWriter)或 GUI(HighGUI)真正依赖的底层实现,而不是说整个 OpenCV 库本身有一个统一的“后端”。换句话说,OpenCV 把“怎么读摄像头/视频文件/网络流”以及“怎么把图像显示到窗口”抽象成统一的 API,但底层到底用 FFmpeg、GStreamer、V4L2、DirectShow、MSMF、AVFoundation 还是 Qt、GTK、Win32,就由“后端”决定。

下面把常见“后端”按场景拆开说:

  1. VideoCapture / VideoWriter 的后端

    • CAP_FFMPEG:用 FFmpeg 解码/编码,功能最全,跨平台。

    • CAP_GSTREAMER:用 GStreamer Pipeline,灵活、可接硬件编解码、网络流。

    • CAP_V4L2 / CAP_V4L:Linux 下直接访问摄像头或 V4L2 设备。

    • CAP_MSMF:Windows Media Foundation,Win10/11 默认。

    • CAP_DSHOW:老 Windows DirectShow。

    • CAP_AVFOUNDATION:macOS / iOS 的 AVFoundation。

    • CAP_OPENCV_MJPEG:内置 MJPEG 编解码,轻量但功能有限。
      使用时通过 cv::VideoCapture cap(0, cv::CAP_GSTREAMER);cv::VideoCapture cap("rtsp://...", cv::CAP_FFMPEG); 指定后端,也可以让 OpenCV 自动探测。

  2. HighGUI(窗口、事件、OpenGL)的后端

    • GTK / GTK3 / GTK4:Linux 下默认,用 X11/Wayland。

    • Qt:跨平台,支持 OpenGL、高 DPI。

    • Win32:Windows 原生。

    • Cocoa:macOS 原生。
      编译时通过 CMake 变量 WITH_GTKWITH_QTWITH_WIN32UI 等打开/关闭。

  3. 深度神经网络推理后端(DNN 模块)

    • DNN_BACKEND_OPENCV:用 OpenCV 自带实现。

    • DNN_BACKEND_INFERENCE_ENGINE:Intel OpenVINO。

    • DNN_BACKEND_CUDA:用 cuDNN。

    • DNN_BACKEND_TIMVX / NPU / NNAPI:嵌入式芯片专用。

  4. GPU 加速后端

    • CUDA:Nvidia GPU,需编译 opencv_contrib 里的 cuda 模块。

    • OpenCL:OpenCV 的 OCL 模块。

    • Vulkan:正在实验阶段。

OpenCV 的后端就是 OpenCV 在运行时真正调用的底层库/驱动/框架,决定了功能、性能、兼容性和可移植性。

OpenCV的cv2.VideoCapture 的“后端”(backend) 在底层实际调用哪个库或 API 来完成视频的采集、解码和读取。

不同操作系统、不同 OpenCV 版本编译时启用的选项不同,可用的后端也不同。选择正确的后端可以解决摄像头打不开、帧率过低、格式不支持、延迟高等问题。

2、Python如何查看OpenCV-python包支持的后端

import cv2
print(cv2.getBuildInformation())

得到的输出结果如下(内容过长有删减),OpenCV是4.12.0,是由发布方通过VS2022和CMake编译好的,重点看Video I/O这一块,可以看到多种后端,但是不支持Gtreamer后端。

General configuration for OpenCV 4.12.0 =====================================Version control:               4.12.0Platform:Timestamp:                   2025-07-04T16:40:32ZHost:                        Windows 10.0.26100 AMD64CMake:                       3.24.2CMake generator:             Visual Studio 17 2022CMake build tool:            C:/Program Files/Microsoft Visual Studio/2022/Enterprise/MSBuild/Current/Bin/amd64/MSBuild.exeMSVC:                        1944Configuration:               Debug ReleaseAlgorithm Hint:              ALGO_HINT_ACCURATEVideo I/O:FFMPEG:                      YES (prebuilt binaries)avcodec:                   YES (58.134.100)avformat:                  YES (58.76.100)avutil:                    YES (56.70.100)swscale:                   YES (5.9.100)avresample:                YES (4.0.0)GStreamer:                   NODirectShow:                  YESMedia Foundation:            YESDXVA:                      YES
-----------------------------------------------------------------

在构造 VideoCapture 时,把后端枚举作为第二个参数传入,但并不是所有的后端都可以用,要看当前的Opencv-python包支持哪些后端。不支持的后端cv2.CAP_GSTREAMERcv2.CAP_V4L2cv2.CAP_INTEL_MFX 等枚举虽然存在,但调用会报错或退化为默认行为,因为编译时没把它们编进来。

import cv2# 常用枚举速查
# cv2.CAP_FFMPEG, cv2.CAP_GSTREAMER, cv2.CAP_V4L2, cv2.CAP_DSHOW,
# cv2.CAP_MSMF, cv2.CAP_AVFOUNDATION, cv2.CAP_OPENCV_MJPEG 等cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)   # 强制使用 DirectShow(Windows)

3、Python如何查看和修改OpenCV-python包默认的后端

cv2.VideoCapture 的默认后端是 cv2.CAP_ANY,即 OpenCV 会根据编译配置自动选择第一个可用的后端。 在大多数官方预编译的 OpenCV 版本中(如通过 pip 安装的),默认通常是 FFmpeg (cv2.CAP_FFMPEG)。

import cv2
cap = cv2.VideoCapture(0)  # 0 表示默认摄像头
print(cap.getBackendName())  # 输出可能是 'MSMF'

输出的结果是MSMF,MSMF 是 Microsoft Media Foundation 的缩写,它是 Windows 平台上 OpenCV 的一个后端实现。这个返回值说明,当前系统使用的默认后端是 Media Foundation (cv2.CAP_MSMF),而不是我之前提到的 FFmpeg。

在 Windows 系统 上,OpenCV 官方预编译的 Python 包(如通过 pip install opencv-python 安装的版本)默认启用了 MSMF 作为优先后端,特别是对于摄像头输入(VideoCapture(0))。这是因为:

  1. MSMF 是 Windows 原生的多媒体框架,兼容性更好,尤其适合摄像头。
  2. FFmpeg 虽然功能强大,但在 Windows 上处理摄像头时可能不如 MSMF 稳定。
import cv2
cap = cv2.VideoCapture(0)  # 或视频文件路径
print(cap.getBackendName())  # 输出当前使用的后端名称
cap = cv2.VideoCapture(0, cv2.CAP_FFMPEG)  # 强制 FFmpeg
print(cap.getBackendName())  # 输出当前使用的后端名称

这个会报错,是因为FFmpeg 后端在 Windows 官方预编译的 opencv-python 包里只支持文件/流输入,不支持本地摄像头(VideoCapture(0)),对摄像头可用的后端只有:

  1. cv2.CAP_MSMF(默认)
  2. cv2.CAP_DSHOW
  3. (个别版本还有 cv2.CAP_VFWcv2.CAP_GSTREAMER,但一般未启用)
import cv2
cap = cv2.VideoCapture(0)  # 或视频文件路径
print(cap.getBackendName())  # 输出当前使用的后端名称
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 强制 DSHOW
print(cap.getBackendName())  # 输出当前使用的后端名称

4、Opencv为什么要加GStreamer后端?

OpenCV 把 GStreamer 做进 VideoCapture / VideoWriter 的后端,并不是为了“多一个选择”这么简单,而是因为它能在下面几个关键场景里把 FFmpeg、MSMF、V4L2 等“传统后端”做不到或做不好的事情一次性解决掉。

GStreamer 后端让 OpenCV 从“能打开视频”升级为“能把整条视频链路(采集→解码→加速→算法→编码→推流/存盘)用几行字符串就串起来”。在边缘计算、多路 RTSP、GPU 硬解/硬编、或需要跟厂商私有相机接口对接时,它比 FFmpeg/MSMF/V4L2 的组合更简洁、更高效、也更易维护。

5、OpenCV加GStreamer的方案对比?

表格的意思就是GStreamer要优于常规的后端,根据你的硬件是否有NVIDIA显卡,又会有CPU和GPU两种不同的方案,若没有NVIDIA GPU硬件:前两种方案(传统OpenCV 或 OpenCV + GStreamer CPU)是你的主要选择,或者考虑其他硬件平台的加速方案。至于第4种DeepStream方案:

  1. 原生 Windows 不支持 DeepStream(包括 OpenCV 与 DeepStream 的完整组合)。
  2. 想在 Windows 机器上用 DeepStream,只能用 WSL2(Windows Subsystem for Linux 2)方式。
  3. OpenCV 本身在 Windows 下当然能用,但“OpenCV+DeepStream”这套组合必须落在 Linux 环境——不管是裸机 Linux 还是 WSL2 里的 Linux。

6、FFMPEG和GStreamer都可以借助NVIDIA进行加速,如何选择?

OpenCV 的 cv2.VideoCapture 支持通过 FFmpeg 和 GStreamer 进行视频采集,两者都能利用 NVIDIA GPU 进行硬件加速。但选择哪一个,取决于你的使用场景、硬件平台、开发复杂度和性能需求。

7、OpenCV加GStreamer后端为什么要源码编译?

OpenCV 使用 GStreamer 后端时通常需要源码编译,主要原因如下:

  1. 官方预编译版本通常未启用 GStreamer 支持:官方提供的二进制版本(如 opencv-python 包)往往为了兼容性和体积考虑,不会默认启用 GStreamer 后端。
  2. 依赖项和版本差异:GStreamer 本身有多个版本(如 1.0 和旧版 0.10),且依赖系统安装的插件库(如 libgstreamer1.0-devlibgstreamer-plugins-base1.0-dev 等),不同系统环境可能版本不一致。源码编译能根据当前系统环境动态链接正确的 GStreamer 版本,避免因版本不匹配导致的功能缺失或崩溃。
  3. 硬件加速与性能优化:在嵌入式设备(如 Jetson 系列、RK3588 等)上,GStreamer 常用于硬件编解码加速(如 NVDEC、V4L2 插件),但这些功能需要特定编译选项和驱动支持。预编译版本通常未针对特定硬件优化,而源码编译可启用 CUDA、OpenCL 等加速选项,配合 GStreamer 的硬件插件提升性能。
  4. 自定义功能需求:需要启用 OpenCV 的扩展模块(如 opencv_contrib 中的 CNN 推理模块 dnn 或视频处理模块 videoio),或裁剪不需要的模块以减小库体积。
  5. 调试与兼容性:某些平台(如 ARM 架构或定制 Linux 系统)的预编译库可能存在兼容性问题,源码编译可解决架构相关的依赖冲突。

8、OpenCV3文件夹介绍

本小节内容转载自https://www.jianshu.com/p/193a6d15ffe0

OpenCV 3 的源代码文件夹

  1. 3rdparty/: 包含第三方库,如用视频解码用的 ffmpeg、jpg、png、tiff 等图片的解码库。

  2. apps/: 包含进行 Haar 分类器训练的工具,OpenCV 进行人脸检测便是基于 Haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。

  3. cmake/: 包含生成工程项目时 cmake 的依赖文件,用于只能搜索第三方库,普通开发者不需要关心这个文件夹的内容。

  4. data/: 包含 OpenCV 库及范例中用到的资源文件,Haar 物体检测的分类器位于 haarcascades 子文件中。

  5. doc/: 包含生成文档所需的源文件及辅助脚本。

  6. include/: 包含入口头文件。OpenCV 子文件夹中是 C 语言风格的 API,也就是《学习 OpenCV》中描述的 API 函数,官方将逐渐淘汰 C 风格函数,因此我不推荐大家使用该文件夹中的头文件。OpenCV 2 子文件夹中只有一个 opencv.hpp 文件,这是 OpenCV 2 及 OpenCV 3 推荐使用的头文件。

  7. modules/: 包含核心代码,OpenCV 真正的代码都在这个文件夹中。OpenCV 从 2.0 开始以模块的方式组织各种功能,近两年模块的数量增长得很快。

  8. platforms/: 包含交叉编译所需的工具链及额外的代码,交叉编译指的是在一个操作系统中编译供另一个系统使用的文件。

  9. samples/: 这是大家最喜欢的范例文件夹。

CPU模块:

  1. androidcamera/: 仅用于 Android 平台,使得可以通过与其他平台相同的接口来控制 Android 设备的相机。

  2. core/: 核心功能模块,定义了基本的数据结构,包括最重要的 Mat 类、XML 读写、OpenGL 三维渲染等。

  3. imgproc/: 全称为 Image Processing,即图像处理,包括图像滤波、集合图像变换、直方图计算、形状描述子等。图像处理是计算机视觉的重要工具。

  4. highgui/: 高级图形界面及多媒体文件读写,包括用户界面、Qt、对图像及视频文件的读写操作。

  5. video/: 视频分析模块,包括背景提取、光流跟踪、卡尔曼滤波等,做视频监控的开发者会经常使用这个模块。

  6. calib3d/: 相机标定及三维重建。相机标定用于取出相机自身缺陷导致的画面形变,还原真实的场景,确保计算的准确性。三维重建通常用在双目视觉(立体视觉),即两个标定后的摄像头观察同一个场景,通过计算两幅画面中的相关性来估计像素深度。

  7. features2d/: 包含 2D 特征值检测的框架。包含各种特征值检测器及描述子,如 FAST、MSER、OBRB、BRISK 等。各类特征值拥有统一的算法接口,因此在不影响程序逻辑的情况下可以替换替换。

  8. objdetect/: 物体检测模块,包括 Haar 分类器、SVM 检测器及文字检测。

  9. ml/: 全称为 Machine Learning,即机器学习。包括统计模型、K 最近邻、支持向量机、决策树、神经网络等经典的机器学习算法。

  10. flann/: 用于在多维空间内聚类及搜索的近似算法,做图像检索的开发者对它不会陌生。

  11. photo/: 计算摄影学,包括图像修补、去噪、HDR 成像、非真实感渲染等。如果读者想实现 Photoshop 的高级功能,那么这个模块必不可少。

  12. stitching:/ 图像拼接,可用于制作全景图。

  13. nonfree/: 受专利保护的算法,包括 SIFT 和 SURF。从功能上来说,这两个算法属于 features2d 模块,但由于它们都是受专利保护的,相拥在项目中可能需要专利方的许可。

  14. contrib:/ 包含新添加的实验性质的代码。开发者期待已久的人脸识别功能便位于这个模块内,名为 FaceRecognizer。

  15. legacy/: 英文含义为遗产,即废弃已久的代码,官方不推荐使用这个模块中的功能。

  16. optim/: 全称为 Optimization,这个模块包含通用的数值优化。包含线性规划等算法。

  17. shape/: 形状匹配算法模块,用于描述形状、比较形状。

  18. softcascade/: 另一种物体检测算法,Soft Cascade 分类器,包含检测模块和训练模块。

  19. superres/: 全称为 Super Resolution,用于增强图像的分辨率。

  20. videostab/: 全称为 Video Stabilization,用于解决相机移动拍摄时视频不够稳定的问题。

  21. viz/: 三维可视化模块。可以认为这个模块实现了一个简单的三维可视化引擎,有各种 UI 空间和键盘、鼠标交互方式。底层实现基于 CTK 这个第三方库。

CUDA模块

  1. 这些模块的名称都以 cuda 开始,cuda 是显卡制造商 NVIDIA 推出的通用计算语言,在 OpenCV 3 中有大量的模块已经被移植到了 cuda 语言。让我们依次看一下。

  2. cuda/: CUDA- 加速的计算机视觉算法,包括数据结构 cuda::GpuMat、基于 cuda 的相机标定及三维重建等。

  3. cudaarithm/: CUDA- 加速的矩阵运算模块。

  4. cudabgsegm/: CUDA- 加速的背景分割模块,通常用于视频监控。

  5. cudacodec/: CUDA- 加速的视频编码与解码。

  6. cudafeatures2d/: CUDA- 加速的特征检测与描述模块,与 features2d/ 模块功能类似。

  7. cudafilters/: CUDA- 加速的图像滤波。

  8. cudaimgproc/: CUDA- 加速的图像处理算法,包含直方图计算、霍夫变换等。

  9. cudaoptflow/: CUDA- 加速的光流检测算法。

  10. cudastereo/: CUDA- 加速的立体视觉匹配算法。

  11. cudawarping/: 实现 CUDA- 加速的快速图像变换,包括透视变换、旋转、改变尺寸等。

samples/ 文件夹

  1. android/: Android 平台的范例。既有完全是 Java 的工程,也有完全是 C++ 的工程,也有更为常见的 Java 与 C++ 共存的工程。

  2. c/: 使用 C API 的范例。在 C API 逐渐退出历史舞台后,这个文件夹也应该会随之消失吧。

  3. cpp/: 由于 OpenCV 是一款 C++ 库,因此 C++ 的返利是最多的。

  4. directx/: directx (d3d) 是微软的私有三维图像 API,这个文件夹中的范例覆盖了 d3d9、d3d10、d3d11.

  5. gpu/: 利用 cuda 加速的范例。

  6. java/: OpenCV 3 官方支持 Java 语言绑定,因此这里演示如何使用 Java 版本的 OpenCV。

  7. python2/: OpenCV 3 官方支持 Python 语言绑定,因此这里演示使用 Python 2 版本的范例。

  8. tapi/: tapi 是 OpenCV 3 的一个新特性,使用 cv::UMat 替代 cv::Mat,实现 CPU 和 GPU 的运算使用统一的接口,不再需要显式地在 CPU 和 GPU 之间传递数据,方便开发人员。

  9. winrt/: Windows RT 平台的范例,开发语言是微软的 C++ “方言”.

samples/cpp/ 文件夹中的范例介绍

  1. 3calibration.cpp/: 同时标定三台水平放置的相机。

  2. bagofwords_classification.cpp/: 使用图像检测实现简易的图像搜索功能。

  3. bgfg_gmg.cpp/: 演示 GMG 背景检测算法的使用方式。

  4. bgfg_segm.cpp/: 演示高斯混合背景检测算法的使用方式。

  5. brief_match_test.cpp/: 使用 BRIEF 特征值来匹配两张图像。

  6. build3dmodel.cpp/: 演示如何使用基础矩阵和特征值来创建三维模型。

  7. calibration.cpp/: 完整的多用途标定程序。

  8. calibration_artificial.cpp/: 在程序中生成一个虚拟的相机,并进行标定。

  9. camshiftdemo.cpp/: 读取实时的摄像头数据,并演示基于均值偏移算法的视频跟踪。

  10. chamfer.cpp/: 使用 Chamfer 算法匹配两副边缘图像。

  11. cloning_demo.cpp/: 命令行模式的图像克隆。

  12. cloning_gui.cpp/: 图形界面交互的图像克隆。

  13. connected_components.cpp/: 查找并绘制图像中的连通区域。

  14. contours2.cpp/: 查找并绘制图像中的轮廓。

  15. convexhull.cpp/: 查找并绘制由点的集合组成的凸包。

  16. cout_mat.cpp/: 使用 cout 来输出各种格式化的 Mat 对象。

  17. create_mask.cpp/: 演示如何创建黑白掩码图像。

  18. dbt_face_detection.cpp/: 基于检测的人脸跟踪代码。

  19. delaunay2.cpp/: 通过鼠标交互式地生成 Delaunay 三角形。

  20. demhist.cpp/: 演示直方图的用法。

  21. descriptor_extractor_matcher.cpp/: 演示 features2d 检测框架的用法。

  22. detection_based_tracker_sample.cpp/: 与 dbt_face_detection.cpp 类似。

  23. detector_descriptor_evaluation.cpp/: 评估各种特征检测器和描述子。

  24. detector_descriptor_matcher_evaluation.cpp/: 评估各种特征检测器和匹配器。

  25. dft.cpp/: 演示一幅图像的离散傅里叶变换。

  26. distrans.cpp/: 显示边缘图像的距离变换值。

  27. drawing.cpp/: 演示绘画和文字显示功能。

  28. edge.cpp/: 演示 Canny 边缘检测。

  29. em.cpp/: 对随机生成的数据点进行 EM 聚类。

  30. fabmap_sample.cpp/: 演示 FAB-MAP 图像检索算法。

  31. facerec_demo.cpp/: 人脸识别。

  32. fback.cpp/: 实时的 Farneback 光流跟踪。

  33. ffilldemo.cpp/: 演示 floodFill() 像素填充算法。

  34. filestorage.cpp/: 演示序列化到外部文件,如yml、xml等。

  35. fitellipse.cpp/: 将轮廓点匹配到椭圆。

  36. freak_demo.cpp/: 演示 FREAK 特征值的用法。

  37. gencolors.cpp/: 演示 generateColors()。

  38. generic_descriptor_match.cpp/: 基于 SURF 的两幅图像间的匹配。

  39. grabcut.cpp/: 演示 GrabCut 分割算法。

  40. houghcircles.cpp/: 用霍夫算法检测圆。

  41. houghlines.cpp/: 用霍夫算法检测直线。

  42. hybridtrackingsample.cpp/: 混合跟踪算法(Hybrid Tracker)的演示。

  43. image.cpp/: 来回转换 cv::Mat 和 IplImage。

  44. image_alignment.cpp/: 演示 findTransformECC() 函数。

  45. image_sequence.cpp/: 使用 VideoCapture 对象读取序列帧。

  46. imagelist_creator.cpp/: 创建图像列表到 xml 文件。

  47. inpaint.cpp/: 使用鼠标交互地进行图像修补。

  48. intelperc_capture.cpp/: Intel 感知计算设备相关的函数。

  49. kalman.cpp/: 使用卡尔曼滤波进行二维跟踪。

  50. kmeans.cpp/: Kmeans 聚类算法的演示。

  51. laplace.cpp/: 拉普拉斯边缘检测。

  52. latentsvm_multidetect.cpp/: latentSVM 检测器。

  53. letter_recog.cpp/: 字母识别。

  54. linemod.cpp/: 基于 OpenNI 的体感设备应用。

  55. lkdemo.cpp/: 演示Lukas-Kanade 光流法。

  56. logpolar_bsm.cpp/: 演示 LogPolar 盲点模型。

  57. lsd_lines.cpp/: LSD 线段检测。

  58. matcher_simple.cpp/: SURF 特征检测。

  59. matching_to_many_images.cpp/: 一对多的特征检测。

  60. meanshift_segmentation.cpp/: 演示基于均值漂移的色彩分割函数——meanShiftSegmentation()。

  61. minarea.cpp/: 寻找最小包围盒、包围圆。

  62. morphology2.cpp/: 形态学图像处理。

  63. npr_demo.cpp/: 演示各种非真实感渲染效果。

  64. opencv_version.cpp/: 输出 OpenCV 库的版本号。

  65. openni_capture.cpp/: 演示 OpenNI 相关的体感设备。

  66. pca.cpp/: 基于 PCA 的人脸识别。

  67. peopledetect.cpp/: 基于 cascade 或 hog 进行物体(人)检测。

  68. phase_corr.cpp/: 演示 phaseCorrelate() 函数。

  69. points_classifier.cpp/: 演示各种机器学习算法。

  70. rgbdodometry.cpp/: 对深度传感器如 Kinect 的数据进行处理。

  71. segment_objects.cpp/: 实时地在视频或相机画面中检测前景物体。

  72. shape_example.cpp/: 比较并检索形状。

  73. shape_transformation.cpp/: 用 SURF 特征值检测形状并进行变换。

  74. squares.cpp/: 检测图像中的方块形状。

  75. starter_imagelist.cpp/: 一个 “hello worl” 性质的入门范例。

  76. starter_video.cpp/: 另一个 “hello worl” 性质的入门范例。

  77. stereo_calib.cpp/: 双目视觉的标定。

  78. stereo_match.cpp/: 计算左右视觉的图像的差异,生成点云文件。

  79. stitching.cpp/: 演示图像拼接算法。

  80. stitching_detailed.cpp/: 演示更多参数的图像拼接算法。

  81. textdetection.cpp/: 实时场景中的文字定位与识别。

  82. train_HOG.cpp/: 训练 HOG 分类器。

  83. ufacedetect.cpp/: 人脸检测。

  84. video_homography.cpp/: 使用 FAST 特征值来跟踪平面物体。

  85. videostab.cpp/: 演示 videostab 中各个参数的用法。

  86. watershed.cpp/: 演示著名的分水岭图像分割算法。

9、如何重新编译OpenCV源码?

9.1、获取源码,去github或利用git工具下载opencv和opencv-contirb源文件

git clone https://github.com/opencv/opencv/releases/tag/4.9.0
git clone https://github.com/opencv/opencv_contrib/releases/tag/4.9.0
但一般速度很慢,考虑用别的镜像
git clone --depth 1 https://gitee.com/mirrors/opencv.git -b 4.9.0
git clone --depth 1 https://gitee.com/mirrors/opencv_contrib.git -b 4.9.0cd opencv && git checkout 4.9.0
cd ../opencv_contrib && git checkout 4.9.0另外也可以借助浏览器下载zip,手动解压
https://github.com/opencv/opencv/archive/4.9.0.zip
https://github.com/opencv/opencv_contrib/archive/4.9.0.zip
解压后得到opencv、opencv_contrib两个文件夹

    我是把下载下的opencv和opencv_contrib两个文件夹放到了D:/opencv_o文件夹下面。

    9.2、创建构建目录,用于存放编译后的源码

    手动在opencv文件夹下面再创建一个build空文件夹,路径为D:/opencv_o/opencv/build。

    9.3、安装GStreamer,https://gstreamer.freedesktop.org/download/#windows

    选择MSVC 64-bit下面的,runtime和development都要下载,得到两个msi文件:

    1. gstreamer-1.0-msvc-x86_64-1.xx.msi
    2. gstreamer-1.0-devel-msvc-x86_64-1.xx.msi

    全部双击安装,路径默认即可,我装在D盘,D:\GStreamer\1.0\msvc_x86_64。安装完,把D:\GStreamer\1.0\msvc_x86_64\bin这个路径添加到系统环境变量。

    9.4、下载安装Visual Studio 2022免费版,https://visualstudio.microsoft.com/zh-hans/downloads/

    工作负载勾选“使用C++的桌面开发”(MSVC v143 + Windows 11 SDK)。

    9.5、下载安装编译需要用到的工具CMAKE,https://cmake.org/

    官网下 Windows x64 Installer,安装时记得把 “Add CMake to the system PATH” 打勾。

    9.6、启动cmake-gui,进行配置

    1. 在Where is the source code填D:/opencv_o/opencv
    2. 在Where to build the binaries填D:/opencv_o/opencv/build
    3. 点Configure,弹出的对话框里Generator选“Visual Studio 17 2022”,Platform选x64,Optional toolset 填cuda=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.4,点击Finish,第一次Configure会跑1-2分钟,出现一片红色是正常的

    4. 然后对选项中搜索关键词,进行如下操作:
    5. WITH_GSTREAMER,打勾
    6. BUILD_opencv_world,取消打勾
    7. OPENCV_EXTRA_MODULES_PATH,填D:/opencv_o/opencv_contrib/modules
    8. CMAKE_INSTALL_PREFIX,填D:/opencv_o/opencv/build/install
    9. BUILD_TESTS / BUILD_PERF_TESTS / BUILD_EXAMPLES,取消打勾
    10. OPENCV_ENABLE_NONEFREE,打勾
    11. 看看有没有GSTREAMER_DIR,没有的话,需要Add Entry,Name填GSTREAMER_DIR,Value填D:/GStreamer/1.0/msvc_x86_64
    12. 如果有NVIDIA的话,WITH_CUDA也可以打勾,但是要安装提前安装好CUDA和cuDNN(https://blog.csdn.net/csdn122345/article/details/147346003,注意安装CUDA时选择完整版,不要选精简版)。要能看到如下CUDA被检测到,才能确定没问题
    13. 再次点击Configure,等着提示“Configuring done”,看看上面表格中是否还有红色条目。没有的话执行下一步
    14. 点击Generate,等着提示“Generating done”
    15. 点击Open Project,或者直接去双击D:/opencv_o/opencv/build/OpenCV.sln
    16. VS打开后,顶部工具栏把“Debug”改为“Release”,平台保持x64
    17. 在右侧Solution Explore(解决方案资源管理器)的CMakeTargets中找到ALL_BUILD,右键选择Build / 生成 / 生成解决方案,要一段时间才能完成
    18. 如果编译报错,一般是xfeatures2d相关的报错,去D:\opencv_o\opencv\build\CMakeDownloadLog.txt查看哪些资源下载失败,一般是https://raw.githubusercontent.com/......,拷贝链接到浏览器,将githubusercontent改成gitmirror,即可下载缺少的资源,部分文件是没法下载的,是文本格式由服务器返回的,点击右键另存为文本即可。下载的东西一定要看放到哪个地方,正常是D:\opencv_o\opencv\.cache下面,看看是否需要额外创建文件夹,如ippicv,ffmpeg,data之类的
    19. 然后重新Configure、Generate,再接着在VS里面,ALL_BUILD,右键选择清理,清理完,再右键选择重新生成,知道最后显示没有失败条目
    20. 在右侧Solution Explore(解决方案资源管理器)的CMakeTargets中找到INSTALL(作用是把文件拷贝到CMAKE_INSTALL_PREFIX指定目录下),右键选择Build,编译完成的文件架构:D:\opencv_o\opencv\build\install,bin下面是各种dll,lib下面是各种lib,include/opencv2下面是各种hpp
    21. 还有一个要注意的点,最后生成的opencv的python库在哪里?查看CMake的Configure下面的日志可以看出,最后生成的cv2文件夹以及pyd文件并不在build/install文件夹下,而是在下面的install path路径下。

      Python 3:

      Interpreter: D:/Software/anaconda3/python.exe (ver 3.11.5)

      Libraries: D:/Software/anaconda3/libs/python311.lib (ver 3.11.5)

      numpy: D:/Software/anaconda3/Lib/site-packages/numpy/core/include (ver 1.24.3)

      install path: D:/Software/anaconda3/Lib/site-packages/cv2/python-3.11

      Python (for build): D:/Software/anaconda3/python.exe

    http://www.dtcms.com/a/437186.html

    相关文章:

  1. 做网站可能存在的问题主域名进入网站
  2. 网站猜你喜欢代码汕尾网站建设公司
  3. 定制开发网站如何报价单做网站的大小
  4. 郑州网站建设郑州网站建设网站建设经验总结
  5. 赤峰最好的网站建设公司网络营销名词解释答案
  6. 国内看网站 优帮云网页设计实训报告总结万能模板
  7. 做网站建设公司起名自己网站wordpress主题怎么
  8. 手机网站建设免费空间北京网页设计培训机构
  9. 网站的逻辑结构flash静态网站
  10. 企业官网型网站模板第一次开票网站建设怎么开
  11. 网站制作资质做访问的公司网站
  12. 网站里面网友点评怎么做wordpress批量导入txt
  13. 政务大厅网站建设管理制度网站研发
  14. 公司网站如何被收录会网站制作的职业是
  15. 快速建站服务国投集团网站开发
  16. 网站开发学校上海2023年建设市场放假时间
  17. 天津网站建设 阿土伯哪里可以免费制作小程序
  18. 中国建设银行怎么添加卡网站零售网站开发
  19. 网站建设找好景科技网站邮箱配置
  20. 企业做网站这些问题必须要注意哪里可以接公司外包业务
  21. 网站定制排名在wordpress中 密码
  22. 网站招工费怎么做会计分录温岭自适应网站建设
  23. 怎样才能建立网站音乐网站前端模板
  24. 南宁公司网站建设方案国外网站发展建设
  25. 湖南沙坪建设集团有限公司网站建站公司哪家好 都选万维科技
  26. 图书管理系统网站开发教程企业网站模板下载服务哪家好
  27. 想建设个网站卖东西买程序的网站
  28. 电商网站开发进度表海南seo排名
  29. 网站需求报告怎么写黄金网站软件app大全视频
  30. 网站怎么做跳转链接官方网站作用