尧图精选

OpenCV安装全攻略:pip、cv2报错、虚拟环境与CUDA编译

🕒 发布时间:2026/10/1 17:03:32 📁 来源:尧图网络
很多人第一次装 OpenCV卡住的地方往往不是写代码而是装本身。你可能在论坛里见过这样的提问pip install opencv-python 明明显示 Successfully installed可一进编辑器敲下 import cv2立刻红波浪线加一句 ModuleNotFoundError: No module named opencv。也有人能 import 成功但一调摄像头窗口就卡死不动鼠标点叉都关不掉。还有人打开一篇教程照着复制命令结果因为 Python 版本、位数、虚拟环境三者对不上折腾一整个下午。这篇教程就围绕 OpenCV 安装这条主线来讲。我把它当成一份从零到跑通第一段代码的完整路线图涵盖 Windows 下的 pip 安装、虚拟环境隔离、contrib 扩展包与 CUDA 编译的取舍、Visual Studio 里的 C 工程配置、Linux 与 Docker 环境的额外依赖以及装完之后调用摄像头时那些让人抓狂的细节。不管你是刚学 Python 图像处理的新手还是要在 C 工程里接 OpenCV 的开发者都能在下面找到对应自己场景的那一段。1. 动手之前先想清楚你要装的到底是哪一种 OpenCV装 OpenCV 最容易出问题的地方不是命令写错而是装错了形态。OpenCV 并不是一个装了就能用的单一软件它更像一套能长成好几种样子的工具给 Python 用的轮子包、给 C 用的库文件、给安卓用的 SDK、给服务器用的无界面版本甚至还有从源码一步步编译出来的定制版。你在网上看到的两篇教程互相矛盾八成是因为它们讲的根本不是同一种安装方式。所以第一步先回答自己三个问题我用什么语言调用我需不需要那些额外功能模块我跑在什么系统上这三个答案一确定后面的路线基本就锁死了不用再纠结网上的各种版本。1.1 pip 版、conda 版与源码编译版的真实差异对于绝大多数用 Python 做图像处理、人脸识别、视频分析的人来说pip install opencv-python 就是最优解。它背后是一个已经编译好的二进制轮子包wheel里面把 OpenCV 的核心算法连同 Python 绑定一起打包好了你下载下来解压即用不需要 C 编译器不需要 CMake整个过程通常一分钟以内。这也是为什么 OpenCV 在 Python 圈子里普及得这么快——安装成本和装个 numpy 差不多。conda 版conda install -c conda-forge opencv走的是另一条路。它的优势在于把 OpenCV 所依赖的底层库比如某些编解码库、图像格式库也一并纳管环境一致性更好特别适合科学研究、需要复现实验结果的场景。代价是 conda 的包体积更大解算依赖的时间更长有时候还会因为频道优先级问题装出一个和 pip 不兼容的组合。源码编译则是给那些必须定制的人准备的。比如你要用到 CUDA 加速、要开启某些默认关闭的模块、要把 OpenCV 交叉编译到嵌入式板子上那就只能自己拉源码、跑 CMake、等上几十分钟甚至几个小时。这条路的能力最强但也最费时间而且编译器版本、CMake 版本、依赖库版本任何一个不对报错信息都能让你怀疑人生。安装方式适合人群耗时能否定制模块主要风险pip 预编译包Python 开发者、新手1~3 分钟否版本与解释器不匹配conda 包科研、需要环境隔离5~15 分钟否频道冲突、依赖解算失败源码编译需要 CUDA、嵌入式移植30 分钟~数小时是编译器/依赖不匹配1.2 版本号、Python 版本与系统位数这三件事必须对齐我见过太多装不上的案例最后查出来都是这三件事没对齐。第一是Python 版本。OpenCV 的预编译包对 Python 大版本是有要求的比如某些较老的 OpenCV 版本只提供到 Python 3.9 的轮子你在 3.12 上装就会变成从源码编译然后因为本机没有编译器而失败。第二是系统位数现在基本都是 64 位但偶尔有人还在用 32 位 Python那能选到的包就少很多。第三是包名与功能范围的对应这一点下面单独说。判断自己环境最直接的办法是在命令行里敲两行python --version python -c import sys; print(sys.executable, sys.version_info)注意输出里的那个路径——它会告诉你当前这个 python 到底是哪一个。很多我明明装了却 import 不到的问题根源就在于你敲命令用的 python和编辑器里跑代码用的 python压根不是同一个。1.3 opencv-python 家族的几个包名别装重了Python 侧的 OpenCV 有好几个包名功能范围不一样混装会互相覆盖opencv-python核心模块够绝大多数人用。opencv-contrib-python核心模块 额外贡献模块比如一些特征点算法、追踪器、AR 相关工具。它已经包含了核心模块所以不要和上面那个一起装。opencv-python-headless去掉了图形界面相关依赖适合服务器、Docker、没有显示设备的机器。opencv-contrib-python-headless上面两者的结合。装重了的典型症状是某个函数一会儿有一会儿没有或者运行时抛出奇怪的符号冲突错误。解决办法很简单先卸载干净再装一个pip uninstall opencv-python opencv-contrib-python opencv-python-headless opencv-contrib-python-headless -y pip install opencv-contrib-python注意uninstall 命令里把四个包名都写上是因为没装的包会被跳过不影响结果但能一次清干净省得来回试。2. Windows 上从零装 OpenCV-Python一条最稳的路线这一节把 Windows 下的完整流程走一遍。我选的是独立 Python venv 虚拟环境 pip 安装这条路线原因有三个一是它对系统环境影响最小卸载就是删文件夹二是 venv 是 Python 自带的不需要额外装工具三是这条路出问题时排查路径最短每一步都能单独验证。如果你已经装了 Anaconda那用 conda 建环境也可以逻辑是一样的。2.1 装 Python 时那个必须勾上的选项去 Python 官网下载安装包安装界面第一屏底部有两个复选框其中Add python.exe to PATH一定要勾上。这个选项的作用是把你刚装的 Python 路径写进系统的环境变量这样你在任意目录敲 python 都能找到它。如果不勾你后续在命令行里敲 python 会提示不是内部或外部命令很多人到这一步就懵了。安装完成后别急着下一步先开一个新的命令行窗口必须是新开的旧窗口不会读取更新后的环境变量敲python --version pip --version两条都有正常输出说明基础环境没问题。如果 pip 报错可以用python -m ensurepip --upgrade修复一下。这里有个小习惯值得养成能用python -m pip就不用裸 pip因为前者能保证你调用的是当前这个 Python 对应的那个 pip避免多版本 python 环境下的错配。2.2 为什么强烈建议先建一个虚拟环境虚拟环境这件事新手常常觉得多余——我就装一个包干嘛多此一举。但等你以后同时维护两个项目一个依赖 OpenCV 4.5另一个依赖更新的版本或者某个项目需要特定版本的 numpy你就会明白隔离的价值。虚拟环境的本质是给每个项目准备一套独立的第三方库目录互不干扰。在项目文件夹里执行python -m venv .venv .venv\Scripts\activate激活成功后命令行前面会出现(.venv)字样这就表示后续所有 pip 安装都进到这个隔离目录里了。如果你用的是 PowerShell 而报禁止运行脚本执行一次Set-ExecutionPolicy -Scope CurrentUser RemoteSigned即可这是执行策略限制不是环境坏了。提示每次打开新终端都要重新 activate。忘了激活是装了却在别的环境找不到的第一大原因。2.3 pip 安装与镜像源的正确用法环境激活后正式安装python -m pip install --upgrade pip python -m pip install opencv-python如果下载速度慢或者中途断连可以指定镜像源python -m pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple安装过程中你会看到它同时把 numpy 也装上了这是正常的因为 OpenCV 的 Python 接口在数组层面完全基于 numpy。如果你已经装过一个很新的 numpypip 可能会提示版本兼容问题这时不要盲目升级先看提示里说的要求范围。numpy 的大版本变动会引入 ABI 层面的变化和 OpenCV 预编译包不匹配时会直接 import 失败报的是类似numpy.core.multiarray failed to import这样的错。想确认装的是哪个版本可以用python -c import cv2; print(cv2.__version__)2.4 三行代码验证装完立刻跑通安装完成别停留在Successfully installed这种表面成功上跑一段最小验证代码才算真的通import cv2 import numpy as np img np.zeros((200, 300, 3), dtypenp.uint8) img[:] (60, 90, 120) cv2.imshow(test, img) cv2.waitKey(0) cv2.destroyAllWindows() print(cv2.__version__)一个灰蓝色小窗口弹出来按任意键关闭命令行打印出版本号说明安装、图形界面、numpy 集成三件事全部正常。如果窗口弹不出来多半是 headless 版本被装进来了如果卡在 waitKey 不动那是另一类问题后面第 6 节细讲。3. import cv2 报红ModuleNotFoundError 的完整排查链路这个报错可以说是 OpenCV 新手遇到频率最高的问题没有之一。它字面意思是找不到名为 opencv 的模块但真正的原因至少有五六种而且报错信息本身完全不会告诉你是哪一种。下面按从最可能到最隐蔽的顺序排一遍你可以照着这条链路走。3.1 第一步永远是确认 pip 和 python 是不是同一个打开命令行敲python -c import sys; print(sys.executable) pip -V对比两行输出里的路径。如果 pip 显示的路径和 python 的路径不在同一个环境里那你就是装到了另一个 Python 上。这种情况在同时装了系统 Python、Anaconda、Microsoft Store 版 Python 的机器上极其常见。解决办法是改用python -m pip install opencv-python它强制使用当前 python 对应的 pip。3.2 编辑器选错解释器PyCharm 与 VS Code 的高频坑命令行验证通过了编辑器里还是报红那问题基本就落在解释器选择上。PyCharm 的做法是打开 Settings → Project → Python Interpreter看当前选的是哪个环境的 python。如果你建了 .venv 却没在这里选中编辑器就还在用全局解释器当然找不到你装在虚拟环境里的包。VS Code 的做法是 CtrlShiftP 打开命令面板输入 Python: Select Interpreter选中带.venv字样的那个。选完之后建议重启一下窗口让语言服务重新索引。这两个操作本身只要三十秒但不知道的人能卡半天。3.3 numpy 版本冲突引发的连锁反应有一种特别迷惑的情况你在命令行跑 import cv2 是好的在编辑器里跑就崩报错还不是 ModuleNotFoundError而是 numpy 相关的导入错误。这通常是编辑器里那个环境装了另一个版本的 numpy和 OpenCV 期望的对不上。处理思路是先看当前 numpy 版本python -c import numpy; print(numpy.__version__)如果版本过新可以降到 OpenCV 官方轮子编译时所依赖的那个范围。比较稳妥的做法是先卸 OpenCV再卸 numpy然后只装 OpenCV让它自己把合适的 numpy 带进来python -m pip uninstall opencv-python numpy -y python -m pip install opencv-python3.4 常见报错与对应处理对照报错信息真实原因处理方式No module named opencv大小写或包名写错模块名是 cv2不叫 opencvNo module named cv2装到了别的解释器用 python -m pip 重装DLL load failed缺运行库或位数不匹配装 VC 运行库换 64 位 Pythonnumpy.core.multiarray failednumpy 版本不兼容重装 OpenCV 让它带 numpy编辑器报红但命令行正常解释器没选对在 IDE 里切换解释器提示模块名是cv2不是opencv也不是OpenCV。这个2是历史遗留和版本号无关就算你装的是 4.x导入时照样写import cv2。3.5 卸载重装之前先看看装了哪些包有时候一个环境里被装了三四个 opencv 变体互相打架。查一下python -m pip list | findstr opencvWindows 用 findstrLinux 和 macOS 用 grep。输出里如果出现两行以上就该清理了。清理后只保留一个你真正需要的包名重新装。这一步花两分钟能省掉后面一堆玄学问题。4. 需要 contrib 模块或 CUDA 加速时源码编译怎么走前面讲的都是能跑起来的路线。但如果你的项目里要用到 SIFT、ArUco、追踪器这一类在 contrib 里的功能或者你对视频处理的实时性有硬要求、想把卷积运算压到显卡上跑那就得考虑源码编译这条更重的路。我先把结论摆出来能装预编译的 contrib 包解决的就不要去编译只有预编译包确实满足不了才值得投入几个小时。4.1 什么时候必须上源码编译判断标准很直接。第一种情况是需要 CUDA 加速预编译的轮子包是纯 CPU 版本用不了显卡。第二种情况是要用某些默认关闭的模块比如部分可视化工具。第三种情况是目标平台特殊比如要交叉编译到某个嵌入式开发板上或者要在没有对应轮子的系统架构上跑。第四种是要和其他 C 工程共用一套 OpenCV 二进制需要统一编译选项。如果你只是想在 Python 里用 contrib 的函数那直接pip install opencv-contrib-python就好了一分钟的事别去碰编译。4.2 Windows 编译的准备工作与关键选项源码编译的核心工具链是 CMake 编译器。Windows 上一般用 Visual Studio 自带的 MSVC所以先装好 Visual Studio安装时勾选使用 C 的桌面开发这一项这一步很多人会漏。然后装 CMake安装时记得勾选添加到系统 PATH。拉源码的时候opencv和opencv_contrib两个仓库的版本标签必须完全一致这是最容易出错的地方。比如都用 4.x.y 这个标签不能一个用主分支一个用某个发布版。配置阶段的几个关键开关cmake -G Visual Studio 17 2022 -A x64 ^ -DCMAKE_BUILD_TYPERelease ^ -DOPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules ^ -DBUILD_opencv_worldON ^ -DWITH_CUDAON ^ -DCUDA_ARCH_BIN8.6 ^ -DBUILD_EXAMPLESOFF ^ -DBUILD_TESTSOFF ^ -DBUILD_PERF_TESTSOFF ^ ../opencv几个选项的意义OPENCV_EXTRA_MODULES_PATH指向 contrib 模块目录BUILD_opencv_world把所有模块合并成一个大库方便工程引用CUDA_ARCH_BIN指定显卡算力版本这个填错了要么编译报错要么运行时性能极差去查一下自己显卡对应的算力号WITH_CUDA打开显卡支持。注意CUDA 编译非常吃时间中等配置的机器三四个小时很正常中途内存不足也会失败。关掉测试和示例能省掉相当一部分编译量。4.3 CUDA 编译最容易翻车的三个地方第一个是版本三角关系显卡驱动版本、CUDA Toolkit 版本、OpenCV 版本三者要能互相配合。驱动太老新版 Toolkit 用不了Toolkit 太新OpenCV 那个版本的 CUDA 支持代码可能还没适配。最省事的做法是照 OpenCV 官方文档里给的那张兼容表来选。第二个是算力号填错。算力号Compute Capability不是显卡型号比如 8.6 对应的是一类架构。填低了会导致部分新指令用不上填高了直接编译失败。不确定的话可以先在配置阶段不指定让 CMake 自动探测代价是编译时间更长会为多代架构都生成代码。第三个是内存。开启 CUDA 之后单个编译单元会变得非常庞大并行编译线程数开太多会直接吃光内存然后进程被杀。稳妥的做法是把并行数降到 4 到 6宁可慢一点也别崩。4.4 编译完之后怎么用起来编译产物里你会拿到一堆 .lib 文件和 .dll 文件以及 Python 侧的 .pyd 模块。C 工程里配置好包含目录、库目录、附加依赖项就能用Python 侧则可以把生成的 pyd 拷贝到某个目录后通过 sys.path 引进去或者直接跑setup.py install一类的流程把它装进环境。需求场景推荐方案预估耗时只想用 contrib 里的函数pip 装 contrib 包1 分钟需要显卡加速的 Python 项目源码编译 CUDA2~5 小时C 工程统一依赖源码编译 Release 版1~3 小时嵌入式平台移植交叉编译视平台而定5. C 工程里接 OpenCVVisual Studio 那几行路径Python 那边 pip 一敲就完事C 这边要麻烦不少因为编译器不知道 OpenCV 装在哪你得手工告诉它头文件在哪、库文件在哪、链接哪些库、运行时去哪找动态库。这四件事说清楚工程就能跑。我按顺序拆开讲。5.1 包含目录与库目录告诉编译器去哪找打开工程的属性页找到VC 目录把 OpenCV 的include目录加进包含目录把x64/vc17/lib这样的库目录加进库目录。路径里的vc17是对应 Visual Studio 版本的版本对不上会出现链接错误。包含目录通常要加两个一个是主include目录另一个是它下面的opencv2目录。这两个都加上能避免一部分找不到头文件的报错。5.2 附加依赖项里那些带版本号后缀的 lib在链接器 → 输入 → 附加依赖项里要填上需要链接的库文件名。源码编译出来的通常是一个大库预编译包里则是按模块拆开的一堆小库。文件名里通常带着版本号和构建类型后缀比如 Debug 版会带一个d。Debug 配置必须链接带 d 的库Release 配置链接不带 d 的库混用会在链接阶段报符号不匹配这个错很难从字面上看出原因。另外如果用的是自己编译的多模块版本附加依赖项列表会很长逐个手打容易漏。有个省事的办法是用 CMake 写构建脚本让它自动处理这些关系但那是另一个话题了。5.3 运行时报找不到 XXX.dll怎么办链接成功不代表能跑。程序启动时还需要在运行时找到那些动态库。有两种做法一是把 OpenCV 的 dll 所在目录加进系统环境变量 PATH二是把需要的 dll 直接拷贝到生成的 exe 旁边。我更推荐第二种因为它让工程自包含换台机器也不容易出问题缺点是要拷贝的 dll 可能有一大堆尤其 Debug 版。提示Debug 版的 dll 体积往往比 Release 版大好几倍如果你只是做个小工具建议直接用 Release 配置省事。5.4 一段最小 C 验证程序配置完别急着上大项目先跑这个#include opencv2/opencv.hpp #include iostream int main() { cv::Mat img cv::imread(test.jpg); if (img.empty()) { std::cout read failed std::endl; return -1; } std::cout size: img.cols x img.rows std::endl; cv::imshow(window, img); cv::waitKey(0); cv::destroyAllWindows(); return 0; }能打印出图片尺寸并弹窗说明头文件、库文件、链接、运行时动态库这四关全部通过。如果读图返回空先确认图片路径是相对当前工作目录的——在 IDE 里运行时工作目录往往不是源码目录这是另一个高频坑。6. 装完之后的第一次摄像头调用为什么窗口会卡住前面都是装的部分这一段讲装完第一次真跑时最典型的两个问题。它们不算安装错误但几乎每个新手都会撞上而且报错信息非常不友好。6.1 waitKey 不带参数为什么会一直卡着cv2.waitKey()不带参数等价于cv2.waitKey(0)含义是无限等待键盘事件。这在显示单张图片时正是你要的行为——窗口一直开着等你按键。但如果你把它放在视频循环里程序就会卡在第一帧死活不动看起来就像死机。正确的用法是传入一个毫秒数while True: ret, frame cap.read() if not ret: break cv2.imshow(cam, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()这里的1表示最多等 1 毫秒有按键就返回键值没有就返回 -1 继续下一轮。 0xFF是为了在不同平台上统一取低八位避免键值比较出错。6.2 摄像头读不到帧的几种原因cap.read()返回的ret是 False常见原因有以下几类现象可能原因排查动作ret 一直 False设备索引不对换 0、1、2 试能打开但画面全黑摄像头被别的程序占用关掉会议软件、浏览器打开报错退出缺少图形界面后端换 headless 版或检查显示环境帧率极低分辨率设置过高调低宽高或改编码格式关不掉窗口忘了 release加 try/finally 释放资源索引这块尤其容易踩坑。笔记本自带摄像头通常是 0外接 USB 摄像头可能是 1 或更大。设备被占用的情况也非常常见很多会议软件退出后进程还在后台摄像头就一直被锁着。6.3 一个能长期用的采集模板我平时写采集脚本都会套一个固定的骨架把资源释放放在 finally 里避免中途异常导致摄像头一直被占用import cv2 cap cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) if not cap.isOpened(): print(camera open failed) raise SystemExit try: while True: ret, frame cap.read() if not ret: print(frame grab failed) break cv2.imshow(preview, frame) key cv2.waitKey(1) 0xFF if key ord(q): break elif key ord(s): cv2.imwrite(snap.jpg, frame) finally: cap.release() cv2.destroyAllWindows()这个模板里加了按 s 存图的功能做数据集采集时很实用。注意设置分辨率不一定生效取决于摄像头驱动支持哪些档位。设完之后可以用cap.get读回来确认实际值不要假设它一定按你说的设。7. 换到 Linux、服务器和容器里装多出来的那些依赖同一套 Python 代码从 Windows 搬到 Linux 服务器或者塞进容器里往往就报错了。原因不复杂Linux 上的 OpenCV 会把图形界面依赖拆成独立的系统库服务器环境通常没装。理解了这一点那些报错就都好办了。7.1 系统包管理器装的和 pip 装的有什么不同Ubuntu 上可以apt install python3-opencv也可以pip install opencv-python。前者装的是系统发行版维护的版本通常偏旧但和系统库贴合度好装完即用不折腾依赖后者版本更新但需要自己解决那些缺失的系统库。我的经验是做开发、追新功能就用 pip做部署、只求稳定运行就用系统包。混用会出问题比如系统包里带了一份pip 又装了一份导入时先命中的是哪一个很难说清。7.2 那个经典的 libGL 报错在服务器上跑 import cv2 报出类似 libGL.so.1: cannot open shared object file 的错误是极高频的场景。原因是 OpenCV 的图形界面模块依赖系统里的图形库而服务器通常没有图形环境。两种解法。第一种是补上依赖sudo apt-get update sudo apt-get install -y libgl1 libglib2.0-0第二种更推荐就是直接换成 headless 版本它本来就不依赖图形库python -m pip uninstall opencv-python opencv-contrib-python -y python -m pip install opencv-python-headless如果你只是做推理、批处理、服务端接口压根不需要 imshow那 headless 是最合适的体积还更小。7.3 容器里装 OpenCV 的写法与体积控制在镜像里装 OpenCV关键是分清楚构建期和运行期需要什么。构建期需要编译工具和头文件运行期只需要运行库。如果你直接在最终镜像里装一堆开发包镜像体积会膨胀到很夸张。FROM python:3.11-slim RUN apt-get update apt-get install -y --no-install-recommends \ libglib2.0-0 libgl1 \ rm -rf /var/lib/apt/lists/* RUN python -m pip install --no-cache-dir opencv-python-headless WORKDIR /app COPY . . CMD [python, main.py]这里用了 slim 基础镜像、--no-install-recommends和--no-cache-dir都是为了压体积。如果确实不需要图形界面其实连 libgl 那两行都可以省掉。提示容器里如果要调用宿主机的摄像头需要额外映射设备而且宿主机得是 Linux。这在做边缘设备推理时很常见但配置比纯软件环境复杂先确认必要性再动手。8. 关于安装这件事我踩过的几个坑和省时间的做法写了这么多条路径最后分享几个纯粹来自实践的体会。这些内容教程里一般不会写但都是花时间换来的。第一个坑是能跑就不记录。我曾经有个项目跑得好好的几个月后换台机器重新配环境怎么都装不成原来的样子因为当时装的版本、依赖的组合全忘了。后来我养成一个习惯每配好一个环境就导出一次依赖清单。python -m pip freeze requirements.txt这个文件体积很小但价值极大尤其是在复现实验和多人协作时。第二个坑是遇事就重装。一开始我一遇到 import 失败就整环境重装重装确实能解决大部分问题但它掩盖了原因下次还会踩。后来我强迫自己按顺序排查先确认解释器、再确认包路径、再确认版本兼容、最后才动手重装。养成这个顺序之后绝大多数问题在一分钟内就能定位到具体哪一环错了。第三个坑是只看安装成功提示。pip 打印 Successfully installed 只代表文件下载解压完成不代表能 import更不代表图形界面能用。我现在装任何带 GUI 的库都会跑一段最小验证代码弹个窗口、打印个版本号确认三件事都通了才算完。多花三十秒能避免后面几个小时的迷茫。第四个坑是不看版本兼容表。CUDA 编译那段时间我最大的教训就是没有先查兼容表就动手结果 Toolkit 和 OpenCV 版本不匹配编译到一半失败白白浪费三小时。现在的做法是只要涉及多组件协作显卡驱动、CUDA、编译器、OpenCV先把官方兼容表看一遍把版本组合确定下来再动手。最后一个小技巧。如果你需要在多个版本之间来回切换别在同一个环境里反复卸载安装直接建多个虚拟环境一个项目一个用不同的文件夹名区分。切换的时候 activate 一下就行比反复折腾依赖快得多也安全得多。装 OpenCV 这件事本身不难难的是搞清楚自己究竟处在哪种场景里——是想要一分钟跑通 Python 代码还是要在 C 工程里配好一套二进制又或者是给服务器准备一个干净的无界面环境。把场景定下来路径自然就清楚了。剩下的就是照着自己的路线一步步验证过去每一步都留个能回退的余地。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →