OpenCV 全面介绍
OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库,由 Intel 发起并持续维护。它包含了数百种计算机视觉算法,是计算机视觉领域最流行的库之一。
·
OpenCV 全面介绍
OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库,由 Intel 发起并持续维护。它包含了数百种计算机视觉算法,是计算机视觉领域最流行的库之一。
1. 核心特性
跨平台支持
- 操作系统: Windows, Linux, macOS, Android, iOS
- 语言支持: C++, Python, Java, JavaScript
- 硬件加速: CPU优化指令集(SSE, AVX), GPU(CUDA), OpenCL
丰富的功能模块
- 图像处理: 滤波、变换、形态学操作
- 视频分析: 运动检测、目标跟踪
- 特征检测: 角点、边缘、关键点检测
- 机器学习: 分类、聚类、神经网络
- 相机标定: 相机校正、3D重建
- GUI支持: 图像显示、交互界面
2. 主要模块组成
| 模块 | 功能描述 |
|---|---|
| core | 核心功能,基本数据结构 |
| imgproc | 图像处理,滤波,几何变换 |
| imgcodecs | 图像文件读写 |
| videoio | 视频捕获和编解码 |
| highgui | 高级GUI和媒体IO |
| video | 视频分析,运动估计 |
| calib3d | 相机标定,3D重建 |
| features2d | 特征检测和描述 |
| objdetect | 目标检测 |
| ml | 机器学习算法 |
| dnn | 深度学习模块 |
3. 基本使用示例
C++ 示例
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 转换为灰度图
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 显示图像
cv::imshow("Original", image);
cv::imshow("Gray", gray);
// 保存图像
cv::imwrite("gray_image.jpg", gray);
cv::waitKey(0);
return 0;
}
Python 示例
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 100, 200)
# 显示结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 核心数据结构
cv::Mat - 图像矩阵
// 创建不同格式的图像矩阵
cv::Mat mat1(480, 640, CV_8UC3); // 480x640, 8位无符号3通道
cv::Mat mat2 = cv::Mat::zeros(100, 100, CV_32F); // 100x100浮点零矩阵
// 访问像素值
uchar pixel_value = mat1.at<uchar>(y, x); // 灰度图
cv::Vec3b color_pixel = mat1.at<cv::Vec3b>(y, x); // 彩色图
5. 图像处理功能
图像滤波
cv::Mat blurred;
cv::GaussianBlur(image, blurred, cv::Size(5, 5), 0); // 高斯模糊
cv::Mat median;
cv::medianBlur(image, median, 5); // 中值滤波
边缘检测
cv::Mat edges;
cv::Canny(image, edges, 50, 150); // Canny边缘检测
形态学操作
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat eroded;
cv::erode(image, eroded, kernel); // 腐蚀操作
6. 特征检测与匹配
关键点检测
// SIFT特征检测
cv::Ptr<cv::SIFT> sift = cv::SIFT::create();
std::vector<cv::KeyPoint> keypoints;
cv::Mat descriptors;
sift->detectAndCompute(image, cv::noArray(), keypoints, descriptors);
特征匹配
cv::BFMatcher matcher(cv::NORM_L2);
std::vector<cv::DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
7. 目标检测
人脸检测
cv::CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_default.xml");
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.1, 3);
for (const auto& face : faces) {
cv::rectangle(image, face, cv::Scalar(255, 0, 0), 2);
}
深度学习目标检测
cv::dnn::Net net = cv::dnn::readNetFromDarknet("yolov3.cfg", "yolov3.weights");
net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
cv::Mat blob = cv::dnn::blobFromImage(image, 1/255.0, cv::Size(416, 416));
net.setInput(blob);
cv::Mat outputs = net.forward();
8. 视频处理
视频捕获
cv::VideoCapture cap(0); // 打开摄像头
// cv::VideoCapture cap("video.mp4"); // 打开视频文件
cv::Mat frame;
while (cap.read(frame)) {
cv::imshow("Video", frame);
if (cv::waitKey(30) == 27) break; // ESC键退出
}
视频写入
cv::VideoWriter writer("output.avi",
cv::VideoWriter::fourcc('M','J','P','G'),
30,
cv::Size(640, 480));
writer.write(frame);
9. 相机标定
std::vector<std::vector<cv::Point3f>> object_points;
std::vector<std::vector<cv::Point2f>> image_points;
// 采集标定板图像
// ...
cv::Mat camera_matrix, dist_coeffs;
std::vector<cv::Mat> rvecs, tvecs;
double error = cv::calibrateCamera(object_points, image_points,
image_size, camera_matrix,
dist_coeffs, rvecs, tvecs);
10. 机器学习
K-means聚类
cv::Mat data; // 样本数据
int cluster_count = 3;
cv::Mat labels, centers;
cv::kmeans(data, cluster_count, labels,
cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::MAX_ITER, 10, 1.0),
3, cv::KMEANS_PP_CENTERS, centers);
SVM分类
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::RBF);
cv::Mat train_data, train_labels;
svm->train(train_data, cv::ml::ROW_SAMPLE, train_labels);
cv::Mat prediction = svm->predict(test_data);
11. 安装与配置
Ubuntu 安装
sudo apt-get install libopencv-dev python3-opencv
Python 安装
pip install opencv-python # 基础版
pip install opencv-contrib-python # 完整版
CMake 配置
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(your_target ${OpenCV_LIBS})
12. 应用领域
- 安防监控: 人脸识别、行为分析
- 医疗影像: 病灶检测、图像分割
- 自动驾驶: 车道检测、障碍物识别
- 工业检测: 产品质量检测
- 增强现实: 姿态估计、3D重建
- 机器人: 视觉导航、目标抓取
OpenCV 的强大功能和跨平台特性使其成为计算机视觉领域的标准工具,无论是学术研究还是工业应用都广泛使用。
更多推荐
所有评论(0)