龙空技术网

opencv_contrib的编译

sinosun 145

前言:

而今朋友们对“几种典型的立体匹配算法”都比较看重,咱们都需要学习一些“几种典型的立体匹配算法”的相关资讯。那么小编也在网上汇集了一些关于“几种典型的立体匹配算法””的相关文章,希望各位老铁们能喜欢,大家快快来学习一下吧!

OpenCV是个极其强大的视觉库,其各模块的功能如下。

calib3d:该模块由相机校准(calibration)和三维重建(3d)两个部分组成,主要用于相机标定与三维视觉等;core:OpenCV的内核模块,定义了基础数据结构与基础计算;dnn:该模块主要用于深度学习推理部署,不支持模型训练;features2d:该模块主要用于特征点处理,例如特征点检测与匹配等;flann:FLANN为快速最近邻算法(Fast Library for Approximate Nearest Neighbors)的缩写,该模块包含快速近似最近邻搜索和聚类等功能;gapi:该模块对图像处理算法做了加速处理,不属于OpenCV的功能模块;highgui:该模块用于创建图像化界面操作,例如创建和操作图像显示窗口、鼠标与键盘事件处理,进度条等图像化交互操作;imgcodecs:该模块负责图像文件读写,如图像读取与保存;imgproc:该模块是OpenCV图像处理最重要的模块,主要功能如图像滤波、图像几何变换、直方图操作等;ml:该模块为机器学习模块,包含常见的机器学习算法,如支持向量机和随机森林等;objdetect:该模块主要用于图像目标检测,例如Haar特征检测等;photo:该模块主要负责照片处理,如照片修复和去噪等;stitching:该模块负责图像拼接,功能包括图像特征点寻找与匹配等图像拼接技术;video:该模块用于视频分析,如运动估计、背景分离等;videoio:该模块负责视频读写,主要视频文件的读取和写入。

OpenCV在视觉算法中的功能非常强大,其中一个原因就是该算法库一直在与时俱进的更新最新的算法,对于具有专利的算法(如SURF)以及一些还没有稳定的算法,OpenCV会将其置于扩展模块中,这些扩展模块包含在opencv_contrib代码库中。

opencv_contrib的模块及其功能说明如下。

alphamat:Alpha Matting信息流算法;aruco:增强现实标记算法;barcode:条形码检测与解码方法;bgsegm:增强背景-前景分割算法;bioinspired:仿生学视觉模型和衍生工具;ccalib:用于三维重建的自定义校准模式;cudaarithm:CUDA矩阵运算;cudabgsegm:CUDA背景分割;cudacodec:CUDA视频编解码;cudafeatures2d:CUDA特征检测与描述;cudafilters:CUDA图像滤波;cudaimgproc:CUDA图像处理;cudalegacy:CUDA传统支持;cudaobjdetect:CUDA目标检测;cudaoptflow:CUDA光流算法;cudastereo:CUDA立体匹配;cudawarping:CUDA图像扭曲;cudev:CUDA设备层;cvv:计算机视觉程序交互式可视化调试的GUI;datasets:用于处理不同数据集的框架;dnn_objdetect:基于DNN的目标检测;dnn_superres:基于DNN的超分;dpm:基于可变形零件的模型;face:人脸分析;freetype:使用freetype/harfbuzz绘制UTF-8字符串;fuzzy:基于模糊数学的图像处理;hdf:分层数据格式I/O例程;hfs:基于层次特征选择的图像分割方法;img_hash:该模块提供了不同的图像哈希算法的实现;intensity_transform:该模块提供了用于调整图像对比度的强度变换算法的实现;julia:OpenCV Julia绑定;line_descriptor:用于从图像中提取线条的二进制描述符;mcc:Macbeth图表模块;optflow:光流算法;ovis:OGRE三维可视化器;phase_unwrapping:相位展开API;plot:Mat数据绘制函数;quality:图像质量分析API;rapid:基于轮廓的三维目标跟踪;reg:图像配准;rgbd:RGB深度处理;saliency:显著性API;sfm:运动结构分析;shape:形状距离与匹配;stereo:立体匹配算法;structured_light:结构光API;superres:超分模块;surface_matching:曲面匹配;text:场景文字检测与识别;tracking:追踪API;videostab:视频稳定;viz:三维可视化器;wechat_qrcode:微信二维码检测器,用于检测和解析二维码;xfeatures2d:features2d扩展模块;ximgproc:imgproc扩展模块;xobjdetect:objdetect扩展模块;xphoto:photo扩展模块。

因为项目中需要使用xfeatures2d模块提供的SIFT来使用SITT算子来提取图像特征,但是OpenCV本身模块不提供,但是再openCV扩展模块中提供了,下载链接:Tags · opencv/opencv_contrib · GitHub,主要找到和你openCV版本一样的版本

使用下面的编译脚本:

echo offREM cd opencv_4_7_0:: 32bitset GENERATOR="Visual Studio 17 2022" -A WIN32set INSTALL_PREFIX=../opencv_4_7_0_x86set BUILD_DIR=.build.x86mkdir %BUILD_DIR%call:start_build:: 64bitset GENERATOR="Visual Studio 17 2022" -A x64set INSTALL_PREFIX=../opencv_4_7_0_x64set BUILD_DIR=.build.x64mkdir %BUILD_DIR%call:start_buildgoto:eof:start_buildcmake -S . -B %BUILD_DIR% -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX% -G %GENERATOR% -DOPENCV_DOWNLOAD_MIRROR_ID=gitcode -DCMAKE_DEBUG_POSTFIX=d  -DOPENCV_EXTRA_MODULES_PATH=F:/raw/opencv_contrib-4.7.0/modulescmake --build %BUILD_DIR% --config Debug -j8cmake --install %BUILD_DIR% --config Debugcmake --build %BUILD_DIR% --config Release -j8cmake --install %BUILD_DIR% --config Releasegoto:eof

其实最核心的就是编译脚本中提供的这个参数

-DOPENCV_EXTRA_MODULES_PATH=F:/raw/opencv_contrib-4.7.0/modules

接下来使用Opencv中SIFT特征检测

#include <opencv2/opencv.hpp>#include <opencv2/xfeatures2d.hpp>#include <iostream>using namespace cv;using namespace std;using namespace cv::xfeatures2d;int main(int agrc, char** agrv){	cv::Mat src = cv::imread("D:/image2/41.jpg",IMREAD_GRAYSCALE);//加载进来就是一张灰度图像	if (!src.data)	{		printf("加载图片失败。。。\n");		return -1;	}	cv::namedWindow("原图", cv::WINDOW_AUTOSIZE);	cv::imshow("原图", src01);  int numFeatures = 40000;  cv::Ptr<cv::SIFT> dector = cv::SIFT::create(numFeatures);  vector<cv::KeyPoint> keyPoints;  dector->detect(src01, keyPoints, cv::Mat());  printf("所有的关键点个数:%d", keyPoints.size());  cv::Mat keypoint_img;  drawKeypoints(src01, keyPoints, keypoint_img, cv::Scalar::all(-1), cv::DrawMatchesFlags::DEFAULT);  cv::namedWindow("SIFT 关键点", cv::WINDOW_AUTOSIZE);  cv::imshow("SIFT 关键点", keypoint_img);  cv::waitKey(0);	return 0;}

效果如下

标签: #几种典型的立体匹配算法