OpenCV从入门到精通:OpenCV安装、配置、依赖安装、基本语法、常用方法详解
引言
OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法接口,支持 Python、C++、Java 等多种语言。它在工业检测、人脸识别、智能驾驶、视觉 SLAM 等领域得到了广泛应用。本文将带领你从安装和配置开始,逐步掌握 OpenCV 的基本语法和常用方法,帮助你快速从入门迈向精通。
目录
作者简介
猫头虎是谁?
大家好,我是 猫头虎,AI全栈工程师,某科技公司CEO,猫头虎技术团队创始人,也被大家称为虎哥。我目前是COC北京城市开发者社区主理人、COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都有超多内容更新。
感谢全网三十多万粉丝的持续支持,我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。
作者名片 ✍️
- 博主:猫头虎
- 全网全平台搜索关键词 猫头虎 即可与我建联
- 作者微信号:Libin9iOak
- 作者公众号:猫头虎技术团队
- 更新日期:2025年04月22日
- 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!
加入我们AI共创团队 🌐
- 猫头虎AI共创社群矩阵列表:
加入猫头虎的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++ 环境安装(源码编译)
- 克隆源码
git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git
- 创建构建目录
cd opencv mkdir build && cd build
- 使用 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 ..
- 编译与安装
make -j$(nproc) # Linux/macOS # 或 在 Windows 上使用 Visual Studio 打开生成的 .sln 文件进行编译 sudo make install
- 验证
pkg-config --modversion opencv4
OpenCV 配置
Python 配置
- 确保
python
与pip
指向同一版本 - 若有多个虚拟环境,推荐使用
virtualenv
或conda
管理 - 在代码开头统一导入:
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:
break
out.write(frame)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.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
常见问题与解决方案
- 安装后
ImportError: libGL.so.1
- Ubuntu:
sudo apt install -y libgl1-mesa-glx
- Ubuntu:
- CMake 找不到 OpenCV
- 检查
OPENCV_DIR
环境变量或 CMake 中的OpenCV_DIR
指定路径
- 检查
- 编译速度慢
- Linux/macOS:
make -j$(nproc)
;Windows 在 CMake GUI 中增加并行构建
- Linux/macOS:
- 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新时代变现的无限可能。一起探索科技的未来,共同成长。🚀