🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
⛳️ 推荐
C++ OpenCV 基本模块介绍
OpenCV核心模块概述
1. 核心模块 (core)
2. 图像处理模块 (imgproc)
3. 高层次GUI模块 (highgui)
其他重要模块
4. 视频处理模块 (video)
5. 目标检测模块 (objdetect)
6. 深度学习模块 (dnn)
OpenCV模块总结
实际应用示例
总结
C++ OpenCV 基本模块介绍
OpenCV (Open Source Computer Vision Library) 是一个功能强大的开源计算机视觉和图像处理库,广泛应用于图像处理、视频分析、机器学习等领域。作为C++开发者,理解其基本模块是高效使用OpenCV的关键。
OpenCV核心模块概述
OpenCV的模块结构设计清晰,每个模块专注于特定功能。以下是C++ OpenCV 4.x版本中最重要的基础模块:
1. 核心模块 (core)
功能:提供基本数据结构、矩阵运算和基本数学工具,是OpenCV的基础。
关键内容:
- Mat:核心数据结构,用于存储图像或矩阵
- 基本操作:矩阵加减、乘除、转置、求逆等
- 类型转换:数据类型转换、颜色空间转换
- 内存管理:Mat的引用计数机制
代码示例:
#include <opencv2/core.hpp> using namespace cv; int main() { // 创建100x100 RGB图像 Mat img = Mat::zeros(100, 100, CV_8UC3); // 创建2x2矩阵 Mat matrix = (Mat_<float>(2, 2) << 1, 2, 3, 4); // 矩阵求逆 Mat inverse; invert(matrix, inverse); return 0; }用途:图像存储、基本运算、数据预处理。
2. 图像处理模块 (imgproc)
功能:提供图像处理功能,包括滤波、变换、边缘检测、轮廓分析等。
关键内容:
- 滤波:高斯模糊(GaussianBlur)、中值模糊(medianBlur)
- 阈值处理:threshold、adaptiveThreshold
- 边缘检测:Canny算法(Canny)
- 几何变换:缩放(resize)、旋转(warpAffine)、透视变换(warpPerspective)
- 轮廓检测:findContours、drawContours
代码示例:
#include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> int main() { // 读取图像 Mat src = imread("image.jpg", IMREAD_GRAYSCALE); // 图像处理 Mat blurred, edges; GaussianBlur(src, blurred, Size(5, 5), 0); Canny(blurred, edges, 100, 200); // 显示结果 namedWindow("Original", WINDOW_NORMAL); imshow("Original", src); namedWindow("Edges", WINDOW_NORMAL); imshow("Edges", edges); waitKey(0); return 0; }用途:图像增强、分割、特征提取。
3. 高层次GUI模块 (highgui)
功能:提供图像/视频显示、用户交互和文件读写功能。
关键内容:
- 图像读写:imread、imwrite
- 窗口管理:namedWindow、imshow、destroyWindow
- 键盘/鼠标交互:waitKey、鼠标回调(setMouseCallback)
代码示例:
#include <opencv2/highgui.hpp> int main() { // 读取图像 Mat img = imread("image.jpg"); // 创建窗口 namedWindow("Image", WINDOW_NORMAL); // 显示图像 imshow("Image", img); // 等待按键 waitKey(0); // 关闭窗口 destroyWindow("Image"); return 0; }用途:图像显示、用户交互、简单应用界面开发。
其他重要模块
4. 视频处理模块 (video)
功能:提供视频捕获、分析和处理功能。
关键内容:
- 视频捕获(VideoCapture)
- 背景减除
- 光流计算(Optical Flow)
- 目标跟踪
5. 目标检测模块 (objdetect)
功能:提供目标检测功能。
关键内容:
- Haar级联分类器(人脸检测:CascadeClassifier)
- HOG + SVM(行人检测)
6. 深度学习模块 (dnn)
功能:支持深度学习模型的加载和推理。
关键内容:
- 支持加载和运行TensorFlow、PyTorch、Caffe等框架的模型
- 新增ONNX层支持(OpenCV 4.7.0版本)
代码示例:
#include <opencv2/dnn.hpp> int main() { // 加载深度学习模型 String modelPath = "yolov3.weights"; String configPath = "yolov3.cfg"; Net net = readNetFromDarknet(configPath, modelPath); // 设置输入 Mat blob; blobFromImage(img, blob, 1/255.0, Size(416, 416), Scalar(0,0,0), true, false); // 推理 net.setInput(blob); Mat outputs = net.forward(); return 0; }OpenCV模块总结
| 模块名称 | 功能 | 适用场景 |
|---|---|---|
| core | 基础数据结构、矩阵运算 | 所有OpenCV操作的底层支撑 |
| imgproc | 图像处理、滤波、边缘检测 | 图像增强、分割、特征提取 |
| highgui | 图像/视频显示、用户交互 | 应用界面开发、调试 |
| video | 视频捕获、分析 | 视频处理、监控系统 |
| objdetect | 目标检测 | 人脸检测、行人检测 |
| dnn | 深度学习模型推理 | 人工智能应用、目标识别 |
| features2d | 特征检测与匹配 | 图像匹配、3D重建 |
实际应用示例
一个完整的C++ OpenCV程序示例,结合多个模块:
#include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace cv; int main() { // 1. 读取图像 Mat img = imread("input.jpg"); if (img.empty()) { std::cout << "Could not open or find the image" << std::endl; return -1; } // 2. 图像预处理(imgproc模块) Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); Mat blurred; GaussianBlur(gray, blurred, Size(5, 5), 0); // 3. 边缘检测(imgproc模块) Mat edges; Canny(blurred, edges, 50, 150); // 4. 显示结果(highgui模块) namedWindow("Original", WINDOW_NORMAL); imshow("Original", img); namedWindow("Edges", WINDOW_NORMAL); imshow("Edges", edges); // 5. 保存结果 imwrite("edges_output.jpg", edges); // 6. 等待按键 waitKey(0); return 0; }总结
OpenCV的模块化设计使开发者能够根据需要选择特定功能,避免不必要的资源消耗。作为C++开发者,掌握core、imgproc和highgui这三个基础模块是开始使用OpenCV的关键。随着项目复杂度的提高,可以逐步引入video、objdetect、dnn等高级模块。
OpenCV 4.7.0版本(2022年12月发布)新增了对ONNX层的支持,大大提高了DNN卷积性能,同时优化了对国产龙芯LoongArch架构的支持,使OpenCV在更多平台上都能发挥高效性能。
对于C++开发者,建议从core、imgproc和highgui模块开始学习,这些是构建任何OpenCV应用的基础。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙