OpenCV从入门到精通:OpenCV安装、配置、依赖安装、基本语法、常用方法详解

article/2025/7/29 6:18:08

OpenCV从入门到精通:OpenCV安装、配置、依赖安装、基本语法、常用方法详解

引言

OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法接口,支持 Python、C++、Java 等多种语言。它在工业检测、人脸识别、智能驾驶、视觉 SLAM 等领域得到了广泛应用。本文将带领你从安装和配置开始,逐步掌握 OpenCV 的基本语法和常用方法,帮助你快速从入门迈向精通。

在这里插入图片描述


目录

  1. 引言
  2. 环境准备
    1. 系统需求
    2. 安装依赖
  3. OpenCV安装
    1. Python 环境安装
    2. C++ 环境安装(源码编译)
  4. OpenCV 配置
    1. Python 配置
    2. C++ 配置(CMake、IDE)
  5. 基本语法
    1. 包含头文件与命名空间
    2. Mat 类详解
    3. 读取与显示图像
    4. 视频读写
  6. 常用方法详解
    1. 色彩空间转换
    2. 图像阈值处理
    3. 滤波与平滑
    4. 边缘检测
    5. 形态学操作
    6. 轮廓检测
    7. 几何变换
    8. 绘制函数
  7. 进阶技巧
    1. ROI 与模板匹配
    2. 特征检测(ORB/SIFT/SURF)
    3. 摄像头标定与透视变换
  8. 常见问题与解决方案
  9. 总结与建议


作者简介

猫头虎是谁?

大家好,我是 猫头虎,AI全栈工程师,某科技公司CEO,猫头虎技术团队创始人,也被大家称为虎哥。我目前是COC北京城市开发者社区主理人COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都有超多内容更新。

感谢全网三十多万粉丝的持续支持,我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。


作者名片 ✍️

  • 博主猫头虎
  • 全网全平台搜索关键词 猫头虎 即可与我建联
  • 作者微信号Libin9iOak
  • 作者公众号猫头虎技术团队
  • 更新日期2025年04月22日
  • 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

加入我们AI共创团队 🌐

  • 猫头虎AI共创社群矩阵列表
    • 点我进入AI共创变现社群入口专区:
      https://bbs.csdn.net/topics/617720781
    • 点我进入CSDNWF万粉博主变现入口专区:
      https://bbs.csdn.net/topics/617717169

加入猫头虎的AI共创变现圈,一起探索编程世界的无限可能! 🚀


正文

环境准备

系统需求

  • 操作系统:Windows 10/11、Ubuntu 18.04 及以上、macOS 10.14 及以上
  • 硬件:内存 ≥ 4GB,建议 8GB 以上;CPU 支持 SSE4.2 优化;若使用深度学习模块,建议配备 NVIDIA GPU
  • 软件
    • Python 3.6 及以上
    • CMake 3.14 及以上(若源码编译)
    • Visual Studio 2019/2022(Windows 下 C++ 编译)

安装依赖

在构建和使用 OpenCV 前,需要安装以下常见依赖:

  • CMake:跨平台构建工具
  • Git:用于克隆源码
  • FFmpeg(可选):视频编解码支持
  • GTK / Qt(Linux/macOS,可选):高级 GUI 支持
  • NumPy(Python):矩阵运算

在 Ubuntu 上,你可以执行:

sudo apt update
sudo apt install -y build-essential cmake git libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev python3-dev python3-numpy

在 macOS(使用 Homebrew):

brew update
brew install cmake pkg-config git gtk+3 ffmpeg

OpenCV 安装

Python 环境安装

最便捷的方法是通过 pip

pip install opencv-python           # 核心模块
pip install opencv-contrib-python    # 包含额外模块(如 xfeatures2d)
  • opencv-python:主要包含核心功能
  • opencv-contrib-python:包含额外的贡献模块

验证安装:

import cv2
print(cv2.__version__)

C++ 环境安装(源码编译)

  1. 克隆源码
    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git
    
  2. 创建构建目录
    cd opencv
    mkdir build && cd build
    
  3. 使用 CMake 配置
    cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \-D BUILD_EXAMPLES=ON ..
    
  4. 编译与安装
    make -j$(nproc)     # Linux/macOS
    # 或 在 Windows 上使用 Visual Studio 打开生成的 .sln 文件进行编译
    sudo make install
    
  5. 验证
    pkg-config --modversion opencv4
    

OpenCV 配置

Python 配置

  • 确保 pythonpip 指向同一版本
  • 若有多个虚拟环境,推荐使用 virtualenvconda 管理
  • 在代码开头统一导入:
    import cv2
    import numpy as np
    

C++ 配置(CMake、IDE)

CMakeLists.txt 中添加:

cmake_minimum_required(VERSION 3.14)
project(MyOpenCVProject)find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

在 Visual Studio 中,安装 OpenCV 后,配置 VC++ 目录 中的包含目录和库目录,并在链接器中添加 .lib 文件。


基本语法

包含头文件与命名空间

  • C++
    #include <opencv2/opencv.hpp>
    using namespace cv;
    
  • Python
    import cv2
    

Mat 类详解

cv::Mat(Python 中为 numpy.ndarray)是 OpenCV 中最核心的图像容器,包含数据指针、尺寸、类型、通道数等信息。

Mat img(480, 640, CV_8UC3, Scalar(0, 0, 255));  // 创建红色图像
img = np.zeros((480, 640, 3), dtype=np.uint8)
img[:] = (0, 0, 255)  # BGR 红色

读取与显示图像

  • 读取imread
  • 显示imshow, waitKey
Mat img = imread("test.jpg");
imshow("原图", img);
waitKey(0);
img = cv2.imread("test.jpg")
cv2.imshow("原图", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

视频读写

  • VideoCapture:读取摄像头或视频文件
  • VideoWriter:保存视频
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame)cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
out.release()
cv2.destroyAllWindows()

常用方法详解

色彩空间转换

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv  = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

图像阈值处理

_, th = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
ad_th = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)

滤波与平滑

blur      = cv2.blur(img, (5,5))
gaussian  = cv2.GaussianBlur(img, (5,5), 0)
median    = cv2.medianBlur(img, 5)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)

边缘检测

edges = cv2.Canny(gray, 50, 150)

形态学操作

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
eroded  = cv2.erode(th, kernel, iterations=1)
dilated = cv2.dilate(th, kernel, iterations=1)
opened  = cv2.morphologyEx(th, cv2.MORPH_OPEN, kernel)

轮廓检测

contours, _ = cv2.findContours(th, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)

几何变换

resized = cv2.resize(img, (320,240))
M       = cv2.getRotationMatrix2D((cx,cy), 45, 1.0)
rotated = cv2.warpAffine(img, M, (w,h))

绘制函数

cv2.line(img, (0,0), (100,100), (255,0,0), 2)
cv2.rectangle(img, (50,50), (200,200), (0,255,0), 3)
cv2.circle(img, (300,300), 50, (0,0,255), -1)
cv2.putText(img, "OpenCV", (10,450),cv2.FONT_HERSHEY_SIMPLEX, 1.2, (255,255,255), 2)

进阶技巧

ROI 与模板匹配

  • ROI(Region of Interest):图像切片
    roi = img[100:200, 150:300]
    
  • 模板匹配matchTemplate + minMaxLoc

特征检测(ORB/SIFT/SURF)

orb  = cv2.ORB_create()
kp, des = orb.detectAndCompute(gray, None)
img2 = cv2.drawKeypoints(img, kp, None)

摄像头标定与透视变换

  • 相机标定calibrateCamera
  • 畸变校正undistort
  • 透视变换getPerspectiveTransform + warpPerspective

常见问题与解决方案

  1. 安装后 ImportError: libGL.so.1
    • Ubuntu:sudo apt install -y libgl1-mesa-glx
  2. CMake 找不到 OpenCV
    • 检查 OPENCV_DIR 环境变量或 CMake 中的 OpenCV_DIR 指定路径
  3. 编译速度慢
    • Linux/macOS:make -j$(nproc);Windows 在 CMake GUI 中增加并行构建
  4. Python 版本不兼容
    • 使用虚拟环境隔离不同 Python 版本

总结与建议

本文全面介绍了从环境依赖、安装配置,到 OpenCV 基本语法与常用方法的使用。建议你在学习过程中结合实际项目,不断实践:

  • 尝试不同滤波器与阈值方法,掌握参数调优
  • 利用视频处理接口,实现实时检测或识别
  • 深入探索贡献模块(opencv_contrib),如人脸识别、深度学习模块

祝你在计算机视觉的道路上不断精进,早日实现从“入门”到“精通”!

文末粉丝专属福利


👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎,期待与您的交流! 🦉💬

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥88/月¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

粉丝福利 GO ! GO ! Go !
cursor随便用!
GPT4.5和GPT4.1 粉丝特享 88园子/🈷️

万粉变现入口:https://gitcode.com/qq_44866828/CSDNWF
AI编程工具特惠入口:https://yeka.ai/i/CHATVIP
GPT4.5/GPT4.1 粉丝特享 88园子/🈷️


¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥88/月¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

联系我与版权声明 📩

  • 联系方式
    • 猫头虎微信号: Libin9iOak
    • 万粉变现经纪人微信号:CSDNWF
    • 公众号: 猫头虎技术团队
  • 版权声明
    本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页。

点击✨⬇️下方名片⬇️✨,加入猫头虎AI共创社群,交流AI新时代变现的无限可能。一起探索科技的未来,共同成长。🚀

🔗 猫头虎抱团AI共创社群 | 🔗 100天精通八种AI编程语言基础教程 | 🔗 GitHub 代码仓库 | 🔗 Java进阶之路:必知必会的核心知识点与版本对比🔗
✨ 猫头虎精品博客

http://www.hkcw.cn/article/uTcgOQTnXM.shtml

相关文章

瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版

前言 在上一篇文章中&#xff0c;我们讲解了如何使用 ffmpeg-rockchip 通过命令来实现 MPP 视频硬件编解码和 RGA 硬件图形加速&#xff0c;在这篇文章&#xff0c;我将讲解如何使用 ffmpeg-rockchip 用户空间库&#xff08;代码&#xff09;实现 MPP 硬件编解码。 本文不仅适…

【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析

基于OpenCV的车牌识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理1) 自适应光照补偿2) 边缘增强 2.2 车牌定位1) 颜色空间筛选2) 形态学操作3) 轮廓分析 2.3 字符分割1) 投影分析2) 连通域筛选 2.4 字符识别 3. 实战部署指南3.1 环境配置3.2 项目代码解析 4.…

2024电赛H题参考方案(+视频演示+核心控制代码)——自动行驶小车

目录 一、题目要求 二、参考资源获取 三、TI板子可能用到的资源 1、环境搭建及工程移植 2、相关模块的移植 四、控制参考方案 1、整体控制方案视频演示 2、视频演示部分核心代码 五、总结 一、题目要求 小编自认为&#xff1a;此次控制类类型题目的H题&#xff0c;相较于往年较…

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

【开源工具】&#x1f399;️ PyQt6录音神器&#xff1a;高颜值多功能音频录制工具开发全解析 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热情…

在PPT中同时自动播放多个视频的方法

在PPT中同时自动播放多个视频的方法 文章目录 在PPT中同时自动播放多个视频的方法1 准备视频2 设置动画为“出现”3 设置所有视频为“自动播放”4 最终效果与其他设置 在PPT制作的过程中&#xff0c;我们经常遇到需要同时自动播放多个视频的情况。本文将详细介绍实现这种效果的…

【智能驱蚊黑科技】基于OpenCV的蚊子雷达追踪打击系统(附完整Python源码)

【智能驱蚊黑科技】基于OpenCV的蚊子雷达追踪打击系统&#xff08;附完整Python源码&#xff09; &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热…

打造沉浸式古诗欣赏页面:HTML5视频背景与音频的完美结合

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Python - 爬虫;Scrapy框架之插件Extensions(四)

阅读本文前先参考 https://blog.csdn.net/MinggeQingchun/article/details/145904572 在 Scrapy 中&#xff0c;扩展&#xff08;Extensions&#xff09;是一种插件&#xff0c;允许你添加额外的功能到你的爬虫项目中。这些扩展可以在项目的不同阶段执行&#xff0c;比如启动…

vscode 连接远程服务器

文章目录 1. 背景2. vscode 连接 服务器步骤2.1 安装 remote-ssh 插件2.2 配置 ssh 秘钥2.3 连接 server vscode 连接远程服务器 1. 背景 有服务器的同学&#xff0c;或许都有这样的感觉&#xff0c;服务器是 linux 系统&#xff0c;且只给个人提供一个终端进行连接&#xff0c…

JavaScript 模块系统:CJS/AMD/UMD/ESM

文章目录 前言一、CommonJS (CJS) - Node.js 的同步模块系统1.1 设计背景1.2 浏览器兼容性问题1.3 Webpack 如何转换 CJS1.4 适用场景 二、AMD (Asynchronous Module Definition) - 浏览器异步加载方案2.1 设计背景2.2 为什么现代浏览器不原生支持 AMD2.3 Webpack/Rollup 如何处…

乌称摧毁34%俄远程机队 俄媒否认 谎言蛛网行动

俄罗斯“与假新闻作战”网站发布文章称,通过分析乌克兰方面发布的视频可以确认,乌总统泽连斯基关于“已摧毁34%俄罗斯远程机队”的说法并不属实。俄方认为,乌克兰实际上可能仅摧毁了两架图-95战略轰炸机及一架安-12运输机,其余受损飞机在维修后均可恢复作战能力。乌克兰国家…

加沙停火协议为何一波三折 美斡旋遇阻

本周,美国就巴勒斯坦伊斯兰抵抗运动(哈马斯)和以色列的停火展开斡旋,提出一项为期60天的加沙地带停火方案。然而,围绕是否接受这份方案,哈马斯和以色列的态度不一,谈判频频出现变数。美国白宫5月29日表示,以色列已接受并签署美国提出的加沙地带临时停火方案。但该方案在…

基于springboot的宠物领养系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

中国王朝简史

文章目录 一、先秦时期&#xff1a;文明起点与制度雏形夏&#xff08;约前2070年–前1600年&#xff09;商&#xff08;约前1600年–前1046年&#xff09;周&#xff08;前1046年–前256年&#xff09; 二、大一统帝国的试验与成熟秦&#xff08;前221年–前207年&#xff09;汉…

Freefilesync配置windows与windows,windows与linux之间同步

说明 Freefilesync&#xff1a;用于windows与windows&#xff0c;windows与linux之间同步 linux 之间同步&#xff0c;使用系统的自带的 corn 软件&#xff0c;执行 sync 命名的脚本即可 一 、下载Freefilesync windows服务器上打开官网 https://freefilesync.org/&#xff0…

数字创新智慧园区建设及运维方案

该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…

P1541 [NOIP 2010 提高组] 乌龟棋

P1541 [NOIP 2010 提高组] 乌龟棋 - 洛谷 题目背景 NOIP2010 提高组 T2 题目描述 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行 N 个格子&#xff0c;每个格子上一个分数&#xff08;非负整数&#xff09;。棋盘第 1 格是唯一的起点&a…

设计模式——享元设计模式(结构型)

摘要 享元设计模式是一种结构型设计模式&#xff0c;旨在通过共享对象减少内存占用和提升性能。其核心思想是将对象状态分为内部状态&#xff08;可共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xff0c;并通过享元工厂管理共享对象池。享元模式包含抽象享…

Qt OpenGL编程常用类

Qt提供了丰富的类来支持OpenGL编程&#xff0c;以下是常用的Qt OpenGL相关类&#xff1a; 一、QOpenGLWidget 功能&#xff1a;用于在 Qt 应用程序中嵌入 OpenGL 渲染的窗口部件。替代了旧版的QGLWidget。提供了OpenGL上下文和渲染表面。 继承关系&#xff1a;QWidget → QOp…

【JMeter】性能测试知识和工具

目录 何为系统性能 何为性能测试 性能测试分类 性能测试指标 性能测试流程 性能测试工具&#xff1a;JMeter&#xff08;主测web应用&#xff09; jmeter文件目录 启动方式 基本元件&#xff1a;元件内有很多组件 jmeter参数化 jmeter关联 自动录制脚本 直连数据库…