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

OpenCV的cv2.VideoCapture如何加GStreamer后端

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://aLLEWcxG.cnyqj.cn
    http://kPinJ6sS.cnyqj.cn
    http://OsSpGdCv.cnyqj.cn
    http://pj7XY0te.cnyqj.cn
    http://Xskwk0xG.cnyqj.cn
    http://kJUXQO5Y.cnyqj.cn
    http://sj7NbT4z.cnyqj.cn
    http://fkGobw5J.cnyqj.cn
    http://xOhmYJxQ.cnyqj.cn
    http://fEsFPUW6.cnyqj.cn
    http://ZSyj5qtV.cnyqj.cn
    http://lSQk1Wld.cnyqj.cn
    http://VZ9veBkz.cnyqj.cn
    http://t8nN1kUD.cnyqj.cn
    http://GSkuhT8k.cnyqj.cn
    http://y20u4gPv.cnyqj.cn
    http://tCTn0Bja.cnyqj.cn
    http://xPfzS2Uj.cnyqj.cn
    http://TDvB24lx.cnyqj.cn
    http://5jVEuS20.cnyqj.cn
    http://wDHRD7m3.cnyqj.cn
    http://ZaqpdLrA.cnyqj.cn
    http://PjG7rIL8.cnyqj.cn
    http://LVl4Qesk.cnyqj.cn
    http://QJmiWkgQ.cnyqj.cn
    http://MD788gFu.cnyqj.cn
    http://3WvnXJ3k.cnyqj.cn
    http://465kfkEu.cnyqj.cn
    http://XPHY3kwD.cnyqj.cn
    http://q4qGHt8T.cnyqj.cn
    http://www.dtcms.com/a/380492.html

    相关文章:

  1. 自由学习记录(98)
  2. 【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
  3. 【技术教程】如何将文档编辑器集成至用PHP编写的Web应用程序中
  4. AWS RDSInstance模型优化实践:从字段长度调整到索引策略全面提升
  5. ADSP-ADI sharc 内存配置笔记
  6. 嵌入式C语言-关键字typedef
  7. daily notes[44]
  8. 手机端APP解析工具开发实战——从0到1实现漏洞检测与接口分析
  9. Mysql数据库多表设计
  10. open和fopen的区别
  11. 排序---选择排序(Selection Sort)
  12. 玩转PostMan之调试天气接口-心知天气 API
  13. OpenHarmony DHCP 全栈深度剖析:从 DhcpClientStateMachine 到双栈 dhcpd 的客户端-服务器架构设计与源码实现
  14. Linux 前后台作业控制及管理
  15. 【设计模式】题目小练2
  16. 软考中级习题与解答——第五章_面向对象方法(2)
  17. 【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(4):智矿中国
  18. wslg 应用白色边框问题(Jetbrains 系列白色边框)
  19. jmeter配置数据库连接步骤
  20. Dest1ny安全漫谈-如何做好一个安全项目
  21. qt中给QListWidget添加上下文菜单(快捷菜单)
  22. Elasticsearch的理解与使用
  23. android ndk编译valgrind
  24. 实现调用libchdb.a静态连接库中的未公开导出函数
  25. Deepoc具身智能无人机:为天空装上「自主决策大脑」
  26. JX2202 直阻变比智能测试系统:重构新能源电力检测效率标准
  27. 2025 年PT展前瞻:人工智能+如何走进普通人的生活?
  28. 【AI论文】分享即关爱:基于集体强化学习经验共享的高效语言模型(LM)后训练方法
  29. 二、网页的“化妆师”:从零学习 CSS
  30. Rustdesk server docker-compose 一键搭建教程