opencv2.3.1+vs2010+sift特征提取(代码片段)

Lyn-Yin Lyn-Yin     2022-11-22     668

关键词:

本人是图像处理界的新手一枚,最近两天搞一下SIFT特征提取的程序编写工作。将整体的构建以及问题解决过程抛出来,给后来人以警示,同时作为科研道路上的一些笔记之用,并欢迎高手批评指点。接下来拉开序幕。

前提:必须具备 vs2010、 C++语言的编程经验,并且懂得相关的配置方法。

1、安装vs2010以及OpenCv2.3.1

其安装过程这里就不在赘述,网上有大批的资源可以浏览。(如果找不到可以给我发邮件)。本人的OpenCv安装的路径为:D:\\OpenCv\\opencv 如图下图所示。路径大家一定要记好,因为这牵扯到后面环境变量的配置。


2、环境变量配置
① 环境变量PATH配置:右击Computer->属性,按照图2-1的箭头所示顺序设置好OpenCv的PATH变量配置。本人的Path路径设定为:D:\\OpenCv\\opencv\\build\\x86\\vc10\\bin。你的需要根据实际情况。


OPECV变量设置:环境变量PATH配置:右击Computer->属性,按照图2-1的箭头所示顺序设置好OpenCv的PATH变量配置。本人的Path路径设定为:D:\\OpenCv\\opencv\\build。切记你的需要根据实际情况。



3、头文件、库文件配置(每次你使用OpenCv进行相关编程的时候,都要检查相应配置是否有问题,这是第一解决思路),接下来我以网上的SIFT程序为例进行说明。

① 新建控制台程序SIFT。(这里不再赘述)

② 添加包含头文件。右击工程->属性,然后按照图的顺序点开,在包含目录中分别添加相应的文件夹:D:\\OpenCv\\opencv\\build\\include;D:\\OpenCv\\opencv\\build\\include\\opencv;D:\\OpenCv\\opencv\\build\\include\\opencv2。(切记这是我的路径)


③ 添加库目录,步骤如②类似,添加库目录:D:\\OpenCv\\opencv\\build\\x86\\vc10\\lib



④ 添加Debug动态链接库,在“活动(Debug)”的“附加依赖库”中追加下面一行(包括所有分号,勿删VS原始数据):

opencv_core231d.lib;opencv_highgui231d.lib;opencv_video231d.lib;opencv_ml231d.lib;opencv_legacy231d.lib;opencv_imgproc231d.lib。具体步骤如图。


⑤添加Release动态链接库,在“活动(Debug)”的“附加依赖库”中追加下面一行(包括所有分号,勿删VS原始数据):

opencv_core230.lib;opencv_highgui230.lib;opencv_video230.lib;opencv_ml230.lib;opencv_legacy230.lib;opencv_imgproc230.lib。具体步骤如图:


4、运行程序

先上代码:

#include "stdafx.h"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"  
#include<vector>
#include <iostream>
using namespace std;
using namespace cv;
int main( int argc, char** argv )  
    
  Mat img_1 = imread( "d:\\\\image1.jpg", CV_LOAD_IMAGE_GRAYSCALE );  
  Mat img_2 = imread( "d:\\\\image2.jpg", CV_LOAD_IMAGE_GRAYSCALE );   
  if( !img_1.data || !img_2.data )  
   std::cout<< " --(!) Error reading images " << std::endl; return -1;   
  //-- Step 1: Detect the keypoints using SURF Detector  
  int minHessian = 400;  
  SurfFeatureDetector detector( minHessian );  
  std::vector<KeyPoint> keypoints_1, keypoints_2;  
  detector.detect( img_1, keypoints_1 );  
  detector.detect( img_2, keypoints_2 );  
  //-- Draw keypoints  
  Mat img_keypoints_1; Mat img_keypoints_2;   
  drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );  
  drawKeypoints( img_2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );   
  //-- Show detected (drawn) keypoints  
  imshow("Keypoints 1", img_keypoints_1 );  
  imshow("Keypoints 2", img_keypoints_2 );  
  waitKey(0);  
  return 0;  
  

不要着急,给你代码你能运行出来吗?网上的代码各种各样,看本文的都是新手(老手请不用嘲讽,老手自动Pass),出个bug你都解决不了,看我娓娓道来。

问题1:两个头文件:

#include "opencv2/features2d/features2d.hpp";

#include "opencv2/highgui/highgui.hpp";

不要以为加上这个头文件就没问题了(如果你配置高明,没问题算你福气,我的就出错误)。如果你出现的错误是这样的:




解决方法:根据上图箭头标注的问题点,寻找highgui.hpp和features2d.hpp所需的动态链接库:opencv_highgui231.lib和opencv_features2d231.lib。所有的动态链接库的位子都在:D:\\OpenCv\\opencv\\build\\x86\\vc10\\bin,如下图所示。



你的

问题2:如果出现缺少tbb.dll的问题

解决方法:

① 将OpenCV安装路径D:\\Program Files\\opencv2.3.1\\build\\common\\tbb\\ia32\\vc10下的tbb.dll复制一份并重命名为tbb_debug.dll

② 将上面得到的tbb_debug.dll拷贝到安装路径D:\\Program Files\\opencv2.3.1\\build\\ x86\\vc10\\bin 目录下即可。

问题3:当运行上述代码的时候,大家会出现如此错误:图片只要大于50×50就报错,错误如下图所示。



这种问题的出现是程序的问题,图像太大导致数据溢出,程序把图像大小写死了。

解决方法:只需要修改程序中的参数即可或者你可以通过检测图片大小自行赋值,如下图



完毕,上结果。



由于水平有限、文字功底有限,表达不足还请阅贴者见谅,如有问题请联系:yinlei_work@163.com.感谢您的阅览。


我无法使用 VS2010 运行 openCV2.3.1,因为未找到 opencv_core231d.dll

】我无法使用VS2010运行openCV2.3.1,因为未找到opencv_core231d.dll【英文标题】:Ican\'trunopenCV2.3.1withVS2010becauseopencv_core231d.dllwasnotfound【发布时间】:2011-09-0307:45:36【问题描述】:我用VS2010安装了openCV2.3.1。在VC++目录中,我将库目录设... 查看详情

OpenCV 2.3.1 安装,VS 2010,MEX

】OpenCV2.3.1安装,VS2010,MEX【英文标题】:OpenCV2.3.1installation,VS2010,MEX【发布时间】:2011-11-0216:37:44【问题描述】:这是另一个OpenCV安装问题,但是我无法通过阅读现有问题的答案找到答案。我正在尝试在VS2010中设置OpenCV2.3.1目录... 查看详情

vs2005配置opencv2.3.1

编译OpenCv   1用CMake导出VC++项目文件运行cmake-gui,设置whereisthesourcecode路径为OpenCV安装路径(本文档假定安装位置为:c:OpenCV2.3.1opencv),并创建子目录c:OpenCV2.3.1opencvuildvs2005,并将cmake的"wheretobuildthebinaries"设 查看详情

opencv2.3.1中的adaboost是否还可以用lbp特征来进行训练

参考技术A我现在用lbp来训练adaboost,但是在某一级的时候会在命令行中连续输输出出20多个同样的弱分类器,然后就出错了,请问这是嘛情况啊?当时出错的图像在附件中,希望大神指导啊。那个200已经是我设置的每层最大的弱... 查看详情

vc2008express下安装opencv2.3.1

VC2008Express下安装OpenCV2.3.1 注意:下列文档以VC2008Express为例,VC2010下的配置应与本文档类似。VC6.0不被OpenCV2.3.1支持。VCExpress是微软提供的免费版,可从此处下载: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/expre 查看详情

sift特征

Sift特征Sift特征包含两个部分,一个是关键点(frame或者keypoint),另外一个就是在关键点处的描述子(descriptor,或者Keypointdescriptor)在面部特征点的检测中,经常提取Sift特征。这里的Sift特征指的就是Sift描述子,在一个点处提取的Si... 查看详情

sift特征

?近日把SIFT特征提取及匹配算法推导了一遍,就開始我个人的一个认识吧。?关于SIFT的算法介绍见最以下的链接。?假设用SIFT的话。MATLAB的SIFT的code能够学习。个人觉得还是C写的SIFT比較好。?VLFeat提供C写的SIFT特征提取算法代码,... 查看详情

5-sift特征提取

 1-效果如下:  查看详情

sift特征提取分析

SIFT特征提取分析sift关键点,关键点检测读‘D.G.Lowe.DistinctiveImageFeaturesfromScale-InvariantKeypoints[J],IJCV,2004’笔记关键点是指图像中或者视觉领域中明显区别于其周围区域的地方,这些关键点对于光照,视角相对鲁棒,所以对图像关... 查看详情

sift特征提取分析

SIFT特征提取分析sift关键点,关键点检测读‘D.G.Lowe.DistinctiveImageFeaturesfromScale-InvariantKeypoints[J],IJCV,2004’笔记关键点是指图像中或者视觉领域中明显区别于其周围区域的地方,这些关键点对于光照,视角相对鲁棒,所以对图像关... 查看详情

sift特征提取分析

SIFT特征提取分析sift关键点,关键点检测读‘D.G.Lowe.DistinctiveImageFeaturesfromScale-InvariantKeypoints[J],IJCV,2004’笔记关键点是指图像中或者视觉领域中明显区别于其周围区域的地方,这些关键点对于光照,视角相对鲁棒,所以对图像关... 查看详情

使用 Sift 特征和 Knn 进行图像分类?

】使用Sift特征和Knn进行图像分类?【英文标题】:ImageclassificationwithSiftfeaturesandKnn?【发布时间】:2015-01-0617:52:02【问题描述】:你能帮我等待使用SIFT特征的图像分类吗?我想根据SIFT特征对图像进行分类:给定一组训练图像,从... 查看详情

SIFT特征提取器

】SIFT特征提取器【英文标题】:SIFTfeatureextractor【发布时间】:2014-03-3011:20:00【问题描述】:哪一个是SIFT中的特征。是关键点还是描述符。我正在尝试聚类。我应该考虑对哪一个进行聚类,为什么?该聚类数据用于分类。【问... 查看详情

SIFT特征和图像分类?

】SIFT特征和图像分类?【英文标题】:SIFTfeaturesandclassificationofimages?【发布时间】:2018-06-2716:26:58【问题描述】:我是图像处理的新手,我想提取图像特征以进行一些分类。我在理解管道时遇到问题。据我了解,我有一张图片,... 查看详情

SIFT 聚类将 sift 特征(128 维向量)转换为词汇表

】SIFT聚类将sift特征(128维向量)转换为词汇表【英文标题】:SIFTclusteringconvertingsiftfeatures(128dimensionalvector)intoavocabulary【发布时间】:2014-03-3012:42:11【问题描述】:如何对提取的SIFT描述符进行聚类。做聚类的目的是为了分类目... 查看详情

sift原理分析

...ml1.SIFT概述SIFT的全称是ScaleInvariantFeatureTransform,尺度不变特征变换,由加拿大教授DavidG.Lowe提出的。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。1.1SIFT算法具的特点图像的局部特征,对旋转... 查看详情

尺度不变特征变换(sift)特征提取分析

背景引言尺度不变换特征变换(ScaleinvariantfeatureTransform,SIFT)(Lowe,1999,2004)[1],[2]的目标是解决低层次特征提取及其图像匹配应用中的许多实际问题。在博文【特征提取】Harris角点检测中介绍的Harris算子对图像尺度变化非常敏感,... 查看详情

opencv例程300篇241.尺度不变特征变换(sift)

...例程300篇-总目录』【youcans的OpenCV例程300篇】241.尺度不变特征变换(SIFT)6.4尺度不变特征变换(SIFT)6.4.1简介尺度不变特征转换算法(Scale-invariantfeaturetransform,SIFT)是图像处理中经典的局部特征 查看详情