pythonopencvsift(python哪个版本opencv可以直接调用sift)

1.python哪个版本opencv可以直接调用sift

这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋。

也是醉了!!!!实在看不下去,来点干货。我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操作。

但实际用起来的时候还不是那么简单。下文将对一个典型的基于OPENCV的SIFT特征点提取以及匹配的例程进行分析,并由此分析详细的对OPENCV中SIFT算法的使用进行一个介绍。

OPENCV下SIFT特征点提取与匹配的大致流程如下:读取图片-》特征点检测(位置,角度,层)-》特征点描述的提取(16*8维的特征向量)-》匹配-》显示其中,特征点提取主要有两个步骤,见上行黄子部分。下面做具体分析。

1、使用opencv内置的库读取两幅图片2、生成一个SiftFeatureDetector的对象,这个对象顾名思义就是SIFT特征的探测器,用它来探测衣服图片中SIFT点的特征,存到一个KeyPoint类型的vector中。这里有必要说keypoint的数据结构,涉及内容较多,具体分析查看opencv中keypoint数据结构分析,里面讲的自认为讲的还算详细(表打我……)。

简而言之最重要的一点在于:keypoint只是保存了opencv的sift库检测到的特征点的一些基本信息,但sift所提取出来的特征向量其实不是在这个里面,特征向量通过 提取,结果放在一个Mat的数据结构中。这个数据结构才真正保存了该特征点所对应的特征向量。

具体见后文对 所生成的对象的详解。就因为这点没有理解明白耽误了一上午的时间。

哭死!3、对图像所有KEYPOINT提取其特征向量:得到keypoint只是达到了关键点的位置,方向等信息,并无该特征点的特征向量,要想提取得到特征向量就还要进行 的工作,建立了 对象后,通过该对象,对之前SIFT产生的特征点进行遍历,找到该特征点所对应的128维特征向量。具体方法参见opencv中所做的SIFT特征向量提取工作简单分析。

通过这一步后,所有keypoint关键点的特征向量被保存到了一个MAT的数据结构中,作为特征。 4、对两幅图的特征向量进行匹配,得到匹配值。

两幅图片的特征向量被提取出来后,我们就可以使用BruteForceMatcher对象对两幅图片的descriptor进行匹配,得到匹配的结果到matches中,这其中具体的匹配方法暂没细看,过段时间补上。至此,SIFT从特征点的探测到最后的匹配都已经完成,虽然匹配部分不甚了解,只扫对于如何使用OPENCV进行sift特征的提取有了一定的理解。

接下来可以开始进行下一步的工作了。附:使用OPENCV下SIFT库做图像匹配的例程// opencv_empty_proj.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include #include #include#include#includeusing namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){ const char* imagename = "img.jpg"; //从文件中读入图像 Mat img = imread(imagename); Mat img2=imread("img2.jpg"); //如果读入图像失败 if(img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } if(img2.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } //显示图像 imshow("image before", img); imshow("image2 before",img2);//sift特征检测 SiftFeatureDetector siftdtc; vectorkp1,kp2; siftdtc.detect(img,kp1); Mat outimg1; drawKeypoints(img,kp1,outimg1); imshow("image1 keypoints",outimg1); KeyPoint kp; vector::iterator itvc; for(itvc=kp1.begin();itvc!=kp1.end();itvc++) { cout<<"angle:"<angle<<"\t"<class_id<<"\t"<octave<<"\t"<pt<<"\t"<response<> matcher; vector matches; Mat img_matches; extractor.compute(img,kp1,descriptor1); extractor.compute(img2,kp2,descriptor2);imshow("desc",descriptor1); cout<

2.求opencv实现sift算法的程序

哈哈,我有一个基于opencv实现的sift,我把代码贴出来,你自己看看吧~~~void sift_detector_and_descriptors(IplImage* i_left,IplImage* i_right){Mat mat_image_left=Mat(i_left,false);Mat mat_image_right=Mat(i_right,false);cv::SiftFeatureDetector *pDetector=new cv::SiftFeatureDetector;pDetector->detect(mat_image_left,left_key_point);pDetector->detect(mat_image_right,right_key_point);Mat left_image_descriptors,right_image_descriptors;cv:: *descriptor_extractor=new cv::;descriptor_extractor->compute(mat_image_left,left_key_point,left_image_descriptors);descriptor_extractor->compute(mat_image_right,right_key_point,right_image_descriptors);Mat result_l,result_r;drawKeypoints(mat_image_left,left_key_point,result_l,Scalar::all(-1),0);drawKeypoints(mat_image_right,right_key_point,result_r,Scalar::all(-1),0);//imshow("result_of_left_detector_sift",result_l);//imshow("result_of_right_detector_sift",result_r);Mat result_of_sift_match;BruteForceMatcher> matcher;matcher.match(left_image_descriptors,right_image_descriptors,result_of_point_match);drawMatches(mat_image_left,left_key_point,mat_image_right,right_key_point,result_of_sift_match,result_of_sift_match);imshow("matches_of_sift",result_of_sift_match);imwrite("matches_of_sift.jpg",result_of_sift_match);}void main(){IplImage *n_left_image=cvLoadImage("D:\\lena.jpg");IplImage *n_right_image=cvLoadImage("D:\\lena_r.jpg");sift_detector_and_descriptors(n_left_image,n_right_image);cvWaitKey(0);}这就是核心代码了。

还有什么不懂,请追问。

3.求opencv实现sift算法的程序

哈哈,我有一个基于opencv实现的sift,我把代码贴出来,你自己看看吧~~~

void sift_detector_and_descriptors(IplImage* i_left,IplImage* i_right)

{

Mat mat_image_left=Mat(i_left,false);

Mat mat_image_right=Mat(i_right,false);

cv::SiftFeatureDetector *pDetector=new cv::SiftFeatureDetector;

pDetector->detect(mat_image_left,left_key_point);

pDetector->detect(mat_image_right,right_key_point);

Mat left_image_descriptors,right_image_descriptors;

cv:: *descriptor_extractor=new cv::;

descriptor_extractor->compute(mat_image_left,left_key_point,left_image_descriptors);

descriptor_extractor->compute(mat_image_right,right_key_point,right_image_descriptors);

Mat result_l,result_r;

drawKeypoints(mat_image_left,left_key_point,result_l,Scalar::all(-1),0);

drawKeypoints(mat_image_right,right_key_point,result_r,Scalar::all(-1),0);

//imshow("result_of_left_detector_sift",result_l);

//imshow("result_of_right_detector_sift",result_r);

Mat result_of_sift_match;

BruteForceMatcher<L2<float>> matcher;

matcher.match(left_image_descriptors,right_image_descriptors,result_of_point_match);

drawMatches(mat_image_left,left_key_point,mat_image_right,right_key_point,result_of_sift_match,result_of_sift_match);

imshow("matches_of_sift",result_of_sift_match);

imwrite("matches_of_sift.jpg",result_of_sift_match);

}

void main()

{

IplImage *n_left_image=cvLoadImage("D:\\lena.jpg");

IplImage *n_right_image=cvLoadImage("D:\\lena_r.jpg");

sift_detector_and_descriptors(n_left_image,n_right_image);

cvWaitKey(0);

}

这就是核心代码了。 还有什么不懂,请追问

4.求助:如何才能在opencv中安装使用SIFT

<code>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/nonfree/features2d.hpp> //Thanks to Alessandro

int main(int argc, const char* argv[])

{

5.请教,opencv3.0中怎么用sift相关函数

opencv_core249d.lib

opencv_imgproc249d.lib

opencv_highgui249d.lib

opencv_ml249d.lib

opencv_video249d.lib

opencv_features2d249d.lib

opencv_calib3d249d.lib

opencv_objdetect249d.lib

opencv_contrib249d.lib

opencv_legacy249d.lib

opencv_flann249d.lib

这里面好像有你需要的源文件

pythonopencvsift

转载请注明出处代码入门网 » pythonopencvsift(python哪个版本opencv可以直接调用sift)

资讯

list替换python(Python里面如何实现tuple和list的转换)

阅读(34)

本文主要为您介绍list替换python,内容包括python替换list元素,列表alist中有很多0数字,要替换成1,python列表,如何批量查找替换,Python中怎么把list转换为字符串。list转为tuple:temp_list = [1,2,3,4,5]将temp_list进行强制转换:tuple(temp

资讯

pythonujson(reportlab怎么安装)

阅读(43)

本文主要为您介绍pythonujson,内容包括pythonjson数据怎么获取数据,Python中json的取值,reportlab怎么安装。1. 先安装pipa) https://pip.pypa.io/en/latest/installing.htmlb) 获取上面网址的g

资讯

python测试平台(Python平台)

阅读(35)

本文主要为您介绍python测试平台,内容包括求推荐一个python+selenium做web自动化的平台.,Python平台,中国十大软件测试网站。官方主页 : http://www.python.org/ For windows的 python解释器 (包括tkInterGUI开发

资讯

转pdfPython(怎么把图片pdf转成电子版pdf)

阅读(26)

本文主要为您介绍转pdfPython,内容包括怎么把图片转换成PDF,怎么把图片pdf转成电子版pdf图片版的pdf可以转成文字版的word吗,在python里用怎么转化pdf文件。可以用编辑器试试看,在 adobe reader dc 的“文件”菜单中,选择“创建”>“从文件创

资讯

python人物关系(python的type和object之间是怎么一种关系)

阅读(45)

本文主要为您介绍python人物关系,内容包括在python发展过程中拥有巨大影响的人物A艾伦图灵B史蒂夫,python中的包含关系怎么写,有几种写法,Python(x,y)和Python是什么关系。object 和 type的关系很像鸡和蛋的关系,先有object还是先有type没法

资讯

python抓取库(python爬虫需要安装哪些库)

阅读(33)

本文主要为您介绍python抓取库,内容包括python爬虫需要安装哪些库,python提取文本摘要的库,如何用python抓取网页数据库。请求库1. requestsrequests 类库是第三方库,比 Python 自带的 urllib 类库使用方便和2. seleniu

资讯

pythonwmi安装(windowspython怎样安装freetype)

阅读(37)

本文主要为您介绍pythonwmi安装,内容包括python导入wmi模块失败,python怎么安装xlrd,windowspython怎样安装freetype。现在需要安装一个matplotlib模块,首先使用的easy_install matplotlib安装提示错误:缺少 libpng fr

资讯

python取最大值(python中如何取一列数最大值)

阅读(37)

本文主要为您介绍python取最大值,内容包括python中如何取一列数最大值,python中如何取一列数最大值,python如何求最大值最小值。如果是从列表中找最大值,则可以使用max(),如:In [279]: a = range(10)In [280]: max(a)Out[

资讯

python文件版本(Python的这几个版本区别)

阅读(29)

本文主要为您介绍python文件版本,内容包括Python的这几个版本区别,Python的这几个版本区别,python文件和解释器版本不同如何解决。系统区别:Download Windows X86 可供电脑系统32位使用。2、Download Windows X86-64 可供电脑

资讯

pythonvimwindows(python在linux和windows的区别)

阅读(37)

本文主要为您介绍pythonvimwindows,内容包括在windows下怎么用vim运行python,如何在windows下实现vim与python的交互,非常新的手请教vim编写python的问题。python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者

资讯

python找最大(python如何将一串数字找出里面最大和最小)

阅读(50)

本文主要为您介绍python找最大,内容包括python如何将一串数字找出里面最大和最小,python找最大值,Python用while循环在一组数中找出最大值,力求简单。目标:我们的目标是把一串数字拆开,查找最大值和最小值做法:1. 将数值转化为字符串2. 将字符

资讯

linuxpython库位置(怎样查看python安装路径)

阅读(1)

本文主要为您介绍linuxpython库位置,内容包括linuxpythonos库在什么地方,linuxpython类库在哪,centos中python的类库文件安装在什么位置。方法如下:linux查看python安装位置。有时我们需要查看python的安装位置,好安装第三方库,linux可以先pyt

资讯

python爬虫是什么(python爬虫是什么)

阅读(1)

本文主要为您介绍python爬虫是什么,内容包括python爬虫是什么,python为什么叫爬虫,python里面的爬虫是什么。世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。什么是爬虫?网络爬虫(

资讯

python未知数(python的不等号是什么)

阅读(1)

本文主要为您介绍python未知数,内容包括请问python怎么用变量表示未知数之间的关系,请问python怎么用变量表示未知数之间的关系,python的不等号是什么。python的不等号如下:!= 不等于 - 比较两个对象是否不相等。

资讯

pythonxef(Python里的flag)

阅读(1)

本文主要为您介绍pythonxef,内容包括pythondef是什么意思,Python里的flag,python里defdrawGap是什么意思。

资讯

pythondll结构体(c结构体怎么用python写)

阅读(1)

本文主要为您介绍pythondll结构体,内容包括c结构体怎么用python写,python怎么构造一个结构体,python怎么导入ctypes。C封装了一个Dll,名为SpjMatlabTest.dll,暴露实现: typedef struct{ double *Min; dou

资讯

python小项目练手(推荐几个适合新手练手的Python项目)

阅读(1)

本文主要为您介绍python小项目练手,内容包括推荐几个适合新手练手的Python项目,python哪些练手的小程序,Python的练手项目值得推荐。实例一:满分推荐,非常值得练习GitHub - Yixiaohan/show-me-the-code: Python 练习册,每天一个小

资讯

python与c语言的区别是(python与C的区别)

阅读(1)

本文主要为您介绍python与c语言的区别是,内容包括python与C的区别,C语言和Python有什么区别呢,c语言和python区别。python与C的区别如下。语言类型不同。Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它

资讯

python3创建文件(python怎么创建一个txt文件)

阅读(1)

本文主要为您介绍python3创建文件,内容包括Python中如何创建文件,python怎么创建一个txt文件,python如何创建文件夹。python怎么创建一个txt文件的方法。如下参考:1.首先使用内置的空闲编辑器进行编辑(右键单击并选择copy),如下图所示。

资讯

python发布服务器(如何用Python搭建一个服务器)

阅读(1)

本文主要为您介绍python发布服务器,内容包括python怎么发布到服务器,如何用Python做大文件上传的服务端,怎么将python部署在服务器上。利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:python -