opencv2/opencv.hpp里面有哪些常用的函数
opencv2/opencv.hpp
是 OpenCV(Open Source Computer Vision Library)的核心头文件,它包含了 OpenCV 的大部分功能模块的声明。OpenCV 是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、视频分析、目标检测和识别等领域。
以下是一些在 opencv2/opencv.hpp
中声明的常用函数和类,按功能模块分类介绍:
1. 图像读取与显示
-
cv::imread
:读取图像文件cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR);
-
cv::imshow
:显示图像cv::imshow("Window Name", img);
-
cv::imwrite
:保存图像到文件cv::imwrite("output.jpg", img);
-
cv::waitKey
:等待键盘输入cv::waitKey(0); // 等待用户按键
2. 图像处理
-
cv::cvtColor
:颜色空间转换cv::Mat gray; cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
-
cv::GaussianBlur
:高斯模糊cv::Mat blurred; cv::GaussianBlur(img, blurred, cv::Size(5, 5), 0);
-
cv::Canny
:Canny边缘检测cv::Mat edges; cv::Canny(gray, edges, 50, 150);
-
cv::threshold
:阈值操作cv::Mat binary; cv::threshold(gray, binary, 128, 255, cv::THRESH_BINARY);
3. 几何变换
-
cv::resize
:调整图像大小cv::Mat resized; cv::resize(img, resized, cv::Size(300, 300));
-
cv::flip
:图像翻转cv::Mat flipped; cv::flip(img, flipped, 1); // 水平翻转
-
cv::warpAffine
:仿射变换cv::Mat rotated; cv::Mat rotMat = cv::getRotationMatrix2D(cv::Point2f(img.cols / 2, img.rows / 2), 45, 1.0); cv::warpAffine(img, rotated, rotMat, img.size());
-
cv::warpPerspective
:透视变换cv::Mat warped; cv::Mat perspMat = cv::getPerspectiveTransform(srcPoints, dstPoints); cv::warpPerspective(img, warped, perspMat, img.size());
4. 特征检测与描述
-
cv::SIFT
:尺度不变特征变换(SIFT)cv::Ptr<cv::SIFT> sift = cv::SIFT::create(); std::vector<cv::KeyPoint> keypoints; cv::Mat descriptors; sift->detectAndCompute(img, cv::Mat(), keypoints, descriptors);
-
cv::ORB
:定向快速和旋转不变特征(ORB)cv::Ptr<cv::ORB> orb = cv::ORB::create(); orb->detectAndCompute(img, cv::Mat(), keypoints, descriptors);
-
cppcv::drawKeypoints
:绘制关键点。复制
cv::Mat imgWithKeypoints; cv::drawKeypoints(img, keypoints, imgWithKeypoints, cv::Scalar::all(-1), cv::DrawMatchesFlags::DEFAULT);
5. 视频处理
-
cppcv::VideoCapture
:读取视频文件或摄像头。复制
cv::VideoCapture cap("video.mp4");
-
cppcv::VideoWriter
:保存视频文件。复制
cv::VideoWriter writer; writer.open("output.mp4", cv::VideoWriter::fourcc('m', 'p', '4', 'v'), 30, cv::Size(640, 480));
-
cppcv::Mat
:用于存储视频帧。复制
cv::Mat frame; while (cap.read(frame)) {cv::imshow("Frame", frame);writer.write(frame); }
6. 数学运算
-
cppcv::add
:图像加法。复制
cv::Mat result; cv::add(img1, img2, result);
-
cppcv::subtract
:图像减法。复制
cv::subtract(img1, img2, result);
-
cppcv::multiply
:图像乘法。复制
cv::multiply(img1, img2, result, 1.0, CV_32F);
7. 绘图功能
-
cppcv::rectangle
:绘制矩形。复制
cv::rectangle(img, cv::Point(10, 10), cv::Point(100, 100), cv::Scalar(0, 255, 0), 2);
-
cppcv::circle
:绘制圆形。复制
cv::circle(img, cv::Point(50, 50), 30, cv::Scalar(0, 0, 255), -1);
-
cppcv::line
:绘制直线。复制
cv::line(img, cv::Point(0, 0), cv::Point(100, 100), cv::Scalar(255, 0, 0), 2);
-
cppcv::putText
:在图像上绘制文本。复制
cv::putText(img, "Hello, OpenCV!", cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 255, 255), 2);
8. 机器学习
-
cppcv::ml::SVM
:支持向量机(SVM)。复制
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create(); svm->setType(cv::ml::SVM::C_SVC); svm->setKernel(cv::ml::SVM::LINEAR); svm->train(trainingData, cv::ml::ROW_SAMPLE, labels);
-
cppcv::ml::KNearest
:K-近邻算法(KNN)。复制
cv::Ptr<cv::ml::KNearest> knn = cv::ml::KNearest::create(); knn->train(trainingData, cv::ml::ROW_SAMPLE, labels);
9. 深度学习
-
cppcv::dnn::readNetFromCaffe
:从Caffe模型加载深度学习网络。复制
cv::dnn::Net net = cv::dnn::readNetFromCaffe("deploy.prototxt", "weights.caffemodel");
-
cppcv::dnn::readNetFromTensorflow
:从TensorFlow模型加载深度学习网络。复制
cv::dnn::Net net = cv::dnn::readNetFromTensorflow("model.pb");
-
cppcv::dnn::Net::setInput
:设置输入数据。复制
cv::Mat blob = cv::dnn::blobFromImage(img, 1.0, cv::Size(300, 300), cv::Scalar(104, 117, 123)); net.setInput(blob);
-
cppcv::dnn::Net::forward
:执行前向传播。复制
cv::Mat detections = net.forward();
10. 其他常用功能
-
cppcv::findContours
:查找轮廓。复制
std::vector<std::vector<cv::Point>> contours; cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
-
cppcv::drawContours
:绘制轮廓。复制
cv::drawContours(img, contours, -1, cv::Scalar(0, 255, 0), 2);
-
cppcv::inRange
:颜色阈值分割。复制
cv::Mat mask; cv::inRange(hsv, cv::Scalar(35, 43, 46), cv::Scalar(77, 255, 255), mask);
总结
opencv2/opencv.hpp
是 OpenCV 的核心头文件,包含了大量用于图像处理、视频处理、特征检测、机器学习和深度学习的函数和类。以上列出的是一些常用的函数,但 OpenCV 的功能远不止这些。通过阅读官方文档和参考示例代码,可以更深入地了解和使用 OpenCV 的强大功能。