OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法接口,支持 Python、C++、Java 等多种语言。它在工业检测、人脸识别、智能驾驶、视觉 SLAM 等领域得到了广泛应用。本文将带领你从安装和配置开始,逐步掌握 OpenCV 的基本语法和常用方法,帮助你快速从入门迈向精通。
在构建和使用 OpenCV 前,需要安装以下常见依赖:
在 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
最便捷的方法是通过 pip
:
pip install opencv-python # 核心模块
pip install opencv-contrib-python # 包含额外模块(如 xfeatures2d)
验证安装:
import cv2
print(cv2.__version__)
克隆源码
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
确保 python
与 pip
指向同一版本
若有多个虚拟环境,推荐使用 virtualenv
或 conda
管理
在代码开头统一导入:
import cv2
import numpy as np
在 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
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()
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(Region of Interest):图像切片
roi = img[100:200, 150:300]
模板匹配:matchTemplate
+ minMaxLoc
orb = cv2.ORB_create()
kp, des = orb.detectAndCompute(gray, None)
img2 = cv2.drawKeypoints(img, kp, None)
calibrateCamera
undistort
getPerspectiveTransform
+ warpPerspective
ImportError: libGL.so.1
sudo apt install -y libgl1-mesa-glx
OPENCV_DIR
环境变量或 CMake 中的 OpenCV_DIR
指定路径make -j$(nproc)
;Windows 在 CMake GUI 中增加并行构建本文全面介绍了从环境依赖、安装配置,到 OpenCV 基本语法与常用方法的使用。建议你在学习过程中结合实际项目,不断实践:
opencv_contrib
),如人脸识别、深度学习模块祝你在计算机视觉的道路上不断精进,早日实现从“入门”到“精通”!