赞
踩
OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,它提供了丰富的图像处理和计算机视觉功能,涵盖了从简单的图像处理操作到复杂的计算机视觉算法的实现。
源码地址:opencv
官网地址:官网
官方文档:官方文档
官方教程:官方教程
扩展模块源码:opencv_contrib
OpenCV 是一个功能强大的开源计算机视觉库,提供了丰富的功能模块,用于图像处理、计算机视觉、深度学习等任务。以下是一些 OpenCV 中常用的功能模块:
Core 模块:
提供了基本的数据结构、算法和函数,是其他模块的基础。包括图像处理、数组操作、数学运算等功能。
Imgproc 模块:
提供了图像处理的各种功能,如滤波、形态学操作、边缘检测、直方图等。
Video 模块:
提供了视频处理相关的功能,包括视频捕获、视频编解码、光流估计、帧间差分等。
HighGui 模块:
提供了图形用户界面相关的功能,包括窗口管理、鼠标和键盘事件处理等。
Features2D 模块:
提供了特征检测和描述子匹配的功能,包括 SIFT、SURF、ORB 等算法。
Objdetect 模块:
提供了目标检测和分类的功能,包括 Haar 特征分类器、HOG+SVM 等算法。
Calib3d 模块:
提供了相机标定、立体视觉和三维重建的功能,包括相机校正、立体匹配等算法。
Dnn 模块:
提供了深度学习模型的加载、推理和微调功能,支持 TensorFlow、PyTorch、Caffe 等框架。
ML 模块:
提供了机器学习相关的功能,包括支持向量机、K最近邻、决策树等算法。
Flann 模块:
提供了快速最近邻搜索的功能,用于高效的特征匹配和检索。
Photo 模块:
提供了图像修复、HDR合成、风格迁移等高级图像处理功能。
Stitching 模块:
提供了全景图像拼接的功能,可以将多幅重叠图像拼接成全景图像。
这些功能模块覆盖了图像处理、计算机视觉、深度学习、机器学习等多个领域,使得 OpenCV 成为一个强大且多用途的计算机视觉库。
1. 图像 I/O:
2. 图像处理:
5. 目标检测与跟踪:
7. 深度学习集成:
* cv::dnn::readNet:加载深度学习模型。
* cv::dnn::Net::forward:模型推理前向传播。
* 深度学习模型支持:如 TensorFlow、PyTorch、Caffe 等。
8. 机器学习与统计:
* cv::ml::SVM:支持向量机。
* cv::ml::KNearest:K最近邻分类器。
* cv::ml::EM:期望最大化算法。
9. 其他模块:
* 形状分析: cv::moments、cv::contourArea 等。
* 图像绘制: cv::rectangle、cv::circle、cv::line 等。
* 图像处理工具: cv::getStructuringElement、cv::filter2D 等。
cv::Mat 是表示图像或任意多维数组的基本数据结构。以下是一些 cv::Mat 常用的操作:
创建 cv::Mat 对象:
访问像素值:
图像属性:
数据拷贝:
图像操作:
图像类型转换:
图像操作:
图像统计:
图像通道分离与合并:
图像显示与保存:
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat image = imread("image.jpg", IMREAD_GRAYSCALE); if (image.empty()) { cout << "无法读取图像文件!" << endl; return -1; } Mat binary; threshold(image, binary, 128, 255, THRESH_BINARY); vector<vector<Point>> contours; vector<Vec4i> hierarchy; // 查找轮廓 findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE); // 绘制轮廓 Mat result = Mat::zeros(image.size(), CV_8UC3); drawContours(result, contours, -1, Scalar(0, 255, 0), 2); // 显示结果 imshow("Contours", result); waitKey(0); return 0; }
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char** argv) { cv::VideoCapture cap; //声明相机捕获对象 cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G')); cap.set(cv::CAP_PROP_FRAME_WIDTH, 640); //图像的宽,需要相机支持此宽 cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480); //图像的高,需要相机支持此高,图像分辨率640×480 int deviceID = 0; //相机设备号 cap.open(deviceID); //打开相机,如果打开视频文件,直接输入视频文件路径和文件名 if (!cap.isOpened()) //判断相机是否打开 { std::cerr << "ERROR!!Unable to open camera\n"; return -1; } cv::Mat img; while (true) { cap >> img; //以流形式捕获图像 cv::namedWindow("example", 1); //创建一个窗口用于显示图像,1代表窗口适应图像的分辨率进行拉伸。 if (img.empty() == false) //图像不为空则显示图像 { cv::imshow("example", img); } int key = cv::waitKey(30); //等待30ms if (key == int('q')) //按下q退出 { break; } } cap.release(); //释放相机捕获对象 cv::destroyAllWindows(); //关闭所有窗口 return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。