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
:
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 配置
确保 python
与 pip
指向同一版本
若有多个虚拟环境,推荐使用 virtualenv
或 conda
管理
在代码开头统一导入:
代码语言:javascript代码运行次数:0运行复制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++
代码语言:javascript代码运行次数:0运行复制#include <opencv2/opencv.hpp>
using namespace cv;
Python
代码语言:javascript代码运行次数:0运行复制import cv2
Mat 类详解
cv::Mat
(Python 中为 numpy.ndarray
)是 OpenCV 中最核心的图像容器,包含数据指针、尺寸、类型、通道数等信息。
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
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:保存视频
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-glx
- Ubuntu:
- CMake 找不到 OpenCV
- 检查
OPENCV_DIR
环境变量或 CMake 中的OpenCV_DIR
指定路径
- 检查
- 编译速度慢
- Linux/macOS:
make -j$(nproc)
;Windows 在 CMake GUI 中增加并行构建
- Linux/macOS:
- Python 版本不兼容
- 使用虚拟环境隔离不同 Python 版本
总结与建议
本文全面介绍了从环境依赖、安装配置,到 OpenCV 基本语法与常用方法的使用。建议你在学习过程中结合实际项目,不断实践:
- 尝试不同滤波器与阈值方法,掌握参数调优
- 利用视频处理接口,实现实时检测或识别
- 深入探索贡献模块(
opencv_contrib
),如人脸识别、深度学习模块
祝你在计算机视觉的道路上不断精进,早日实现从“入门”到“精通”!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除语法opencv编译配置入门本文标签: OpenCV从入门到精通OpenCV安装配置依赖安装基本语法常用方法详解
版权声明:本文标题:OpenCV从入门到精通:OpenCV安装、配置、依赖安装、基本语法、常用方法详解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747397202a2693463.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论