OpenCV从入门到精通:OpenCV安装、配置、依赖安装、基本语法、常用方法详解
引言OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法接口,支持 Python、C++、Java 等多种语言。它在工业检测、人脸识别、智能驾驶、视觉 SLAM 等领域得到了广泛应用。本文将带领你从安装和配置开始,逐步掌握 OpenCV 的基本语法和常用方法,帮助你快速从入门迈向精通。
环境准备系统需求操作系统: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 上,你可以执行:
代码语言:javascript代码运行次数:0运行复制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):
代码语言:javascript代码运行次数:0运行复制brew update
brew install cmake pkg-config git gtk+3 ffmpegOpenCV 安装Python 环境安装最便捷的方法是通过 pip:
代码语言:javascript代码运行次数:0运行复制pip install opencv-python # 核心模块
pip install opencv-contrib-python # 包含额外模块(如 xfeatures2d)opencv-python:主要包含核心功能opencv-contrib-python:包含额外的贡献模块验证安装:
代码语言:javascript代码运行次数:0运行复制import cv2
print(cv2.__version__)C++ 环境安装(源码编译)克隆源码
代码语言:javascript代码运行次数:0运行复制git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git创建构建目录
代码语言:javascript代码运行次数:0运行复制cd opencv
mkdir build && cd build使用 CMake 配置
代码语言:javascript代码运行次数:0运行复制cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..编译与安装
代码语言:javascript代码运行次数:0运行复制make -j$(nproc) # Linux/macOS
# 或 在 Windows 上使用 Visual Studio 打开生成的 .sln 文件进行编译
sudo make install验证
代码语言:javascript代码运行次数:0运行复制pkg-config --modversion opencv4OpenCV 配置Python 配置确保 python 与 pip 指向同一版本
若有多个虚拟环境,推荐使用 virtualenv 或 conda 管理
在代码开头统一导入:
代码语言:javascript代码运行次数:0运行复制import cv2
import numpy as npC++ 配置(CMake、IDE)在 CMakeLists.txt 中添加:
代码语言:javascript代码运行次数:0运行复制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++
代码语言:javascript代码运行次数:0运行复制#include
using namespace cv;Python
代码语言:javascript代码运行次数:0运行复制import cv2Mat 类详解cv::Mat(Python 中为 numpy.ndarray)是 OpenCV 中最核心的图像容器,包含数据指针、尺寸、类型、通道数等信息。
代码语言:javascript代码运行次数:0运行复制Mat img(480, 640, CV_8UC3, Scalar(0, 0, 255)); // 创建红色图像代码语言:javascript代码运行次数:0运行复制img = np.zeros((480, 640, 3), dtype=np.uint8)
img[:] = (0, 0, 255) # BGR 红色读取与显示图像读取:imread显示:imshow, waitKey代码语言:javascript代码运行次数:0运行复制Mat img = imread("test.jpg");
imshow("原图", img);
waitKey(0);代码语言:javascript代码运行次数:0运行复制img = cv2.imread("test.jpg")
cv2.imshow("原图", img)
cv2.waitKey(0)
cv2.destroyAllWindows()视频读写VideoCapture:读取摄像头或视频文件VideoWriter:保存视频代码语言:javascript代码运行次数:0运行复制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()常用方法详解色彩空间转换代码语言:javascript代码运行次数:0运行复制gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)图像阈值处理代码语言:javascript代码运行次数:0运行复制_, 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)滤波与平滑代码语言:javascript代码运行次数:0运行复制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)边缘检测代码语言:javascript代码运行次数:0运行复制edges = cv2.Canny(gray, 50, 150)形态学操作代码语言:javascript代码运行次数:0运行复制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)轮廓检测代码语言:javascript代码运行次数:0运行复制contours, _ = cv2.findContours(th, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)几何变换代码语言:javascript代码运行次数:0运行复制resized = cv2.resize(img, (320,240))
M = cv2.getRotationMatrix2D((cx,cy), 45, 1.0)
rotated = cv2.warpAffine(img, M, (w,h))绘制函数代码语言:javascript代码运行次数:0运行复制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):图像切片
代码语言:javascript代码运行次数:0运行复制roi = img[100:200, 150:300]模板匹配:matchTemplate + minMaxLoc
特征检测(ORB/SIFT/SURF)代码语言:javascript代码运行次数:0运行复制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-glxCMake 找不到 OpenCV 检查 OPENCV_DIR 环境变量或 CMake 中的 OpenCV_DIR 指定路径编译速度慢 Linux/macOS:make -j$(nproc);Windows 在 CMake GUI 中增加并行构建Python 版本不兼容 使用虚拟环境隔离不同 Python 版本总结与建议本文全面介绍了从环境依赖、安装配置,到 OpenCV 基本语法与常用方法的使用。建议你在学习过程中结合实际项目,不断实践:
尝试不同滤波器与阈值方法,掌握参数调优利用视频处理接口,实现实时检测或识别深入探索贡献模块(opencv_contrib),如人脸识别、深度学习模块祝你在计算机视觉的道路上不断精进,早日实现从“入门”到“精通”!