admin管理员组

文章数量:1437096

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

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 ffmpeg

OpenCV 安装

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 .git
git clone .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 opencv4

OpenCV 配置

Python 配置

确保 pythonpip 指向同一版本

若有多个虚拟环境,推荐使用 virtualenvconda 管理

在代码开头统一导入:

代码语言:javascript代码运行次数:0运行复制
import cv2
import numpy as np
C++ 配置(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 <opencv2/opencv.hpp>
using namespace cv;

Python

代码语言:javascript代码运行次数:0运行复制
import cv2
Mat 类详解

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

常见问题与解决方案

  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),如人脸识别、深度学习模块

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除语法opencv编译配置入门

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