OpenCV入门 - 提取SIFT关键点

在基于内容的图像检索中,图像的局部不变特征是相对全局特征来说的,局部特征可以有力的描述图像的特征,具有重要的意义,而在很多基于灰度的局部特征提取算法中SIFT具有最好的效果,具体原理要看Lowe的论文,下面利用opencv感受以下效果。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/features2d.hpp> //
using namespace cv;

int main(int argc, const char *argv[]){
    Mat input = imread("input.jpg", 0);// load as grayscale

    SiftFeatureDetector detector;
    vector<KeyPoint> keypoints;
    detector.detect(input, keypoints);

    // show the keypoints on an image
    Mat output;
    drawKeypoints(input, keypoints, output);
    imwrite("sift_result.jpg",output);

    return 0;
}

运行:

g++ sift_demo.cxx 编译出现链接错误:

/tmp/cczZicnK.o: In function `main‘:

sift_demo.cxx:(.text+0x4d): undefined reference to `cv::imread(std::string const&, int)‘

/tmp/cczZicnK.o: In function `cv::Mat::~Mat()‘:

sift_demo.cxx:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x2b): undefined reference to `cv::fastFree(void*)‘

/tmp/cczZicnK.o: In function `cv::Mat::release()‘:

sift_demo.cxx:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x3b): undefined reference to `cv::Mat::deallocate()‘

collect2: error: ld returned 1 exit status

解决:说明没有找到库的位置,制定, g++ sift_demo.cxx `pkg-config opencv --cflags --libs`

最后得到的结果如下,可以看到关键点很多,通过圈的形式表现在原图上。

时间: 2024-11-01 06:53:30

OpenCV入门 - 提取SIFT关键点的相关文章

OpenCV入门 - 提取SIFT特征向量

为了确保旋转不变性,会以关键点为中心,以关键点的方向建立坐标轴,不是单独考察单一的这个关键点,而是需要一个邻域.邻域中每个小格的方向代表该像素的梯度方向,长度是梯度模大小,在每个4X4的小块上计算8个方向的梯度方向直方图,统计每个方向的累加值,形成一个种子点.David G.Lowe建议对每个关键点使用4X4=16个种子点进行描述,每个种子点包含8个方向信息,所以一个关键点就会产生16X8=128维的信息,形成128维的SIFT特征向量.下面使用opencv来对一个图片求特征向量. #inclu

OpenCV入门教程之八 直线、轮廓的提取与描述

基于内容的图像分析的重点是提取出图像中具有代表性的特征,而线条.轮廓.块往往是最能体现特征的几个元素,这篇文章就针对于这几个重要的图像特征,研究它们在OpenCV中的用法,以及做一些简单的基础应用. 一.Canny检测轮廓 在上一篇文章中有提到sobel边缘检测,并重写了soble的C++代码让其与matlab中算法效果一致,而soble边缘检测是基于单一阈值的,我们不能兼顾到低阈值的丰富边缘和高阈值时的边缘缺失这两个问题.而canny算子则很好的弥补了这一不足,从目前看来,canny边缘检测在

【OpenCV入门教程之十七】OpenCV重映射 &amp; SURF特征点检测合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

【OpenCV入门教程之十八】OpenCV仿射变换 &amp; SURF特征点描述合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

史上最全的OpenCV入门教程!这篇够你学习半个月了!万字长文入门

一.Python OpenCV 入门 欢迎阅读系列教程,内容涵盖 OpenCV,它是一个图像和视频处理库,包含 C ++,C,Python 和 Java 的绑定. OpenCV 用于各种图像和视频分析,如面部识别和检测,车牌阅读,照片编辑,高级机器人视觉,光学字符识别等等. 你将需要两个主要的库,第三个可选:python-OpenCV,Numpy 和 Matplotlib. Windows 用户: python-OpenCV:有其他的方法,但这是最简单的. 下载相应的 wheel(.whl)文件

OpenCV入门

此系列文章只是OpenCV tutorials的学习和总结. 网址:http://docs.opencv.org/doc/tutorials/tutorials.html 基础OpenCV入门包括以下内容: OpenCV介绍---------------------------------学习如何安装OpenCV. core模块,核心功能---------------------------学习基础模块,操作图像等. imgproc模块,图像处理-----------------------学习

opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_eWeRu9p9GhZd49WJ1bEOB7VluQdBdRKeehAO2Q3B7RatTXDruq-M9cR-W2yqATerDlIU1T3whYoyQfi http://www.cvchina.info/2011/07/04/whats-orb/ 主要的特征检测方法有以下几种,在一般的图像处理库中(如opencv, VLFeat, Boofcv等)都会实现. FAS

【OpenCV入门教程之五】 分离颜色通道&amp;多通道图像混合

上篇文章中我们讲到了使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作. 而为了更好的观察一些图像材料的特征,有时需要对RGB三个颜色通道的分量进行分别显示和调整.通过OpenCV的split和merge方法可以很方便的达到目的. 一.分离颜色通道 就让我们来详细介绍一下这两个互为冤家的函数.首先是进行通道分离的split函数. <1>split函数详解 将一个多通道数组分离成几个单通道数组.ps:这里的array按

【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析

了解过之前老版本OpenCV的童鞋们都应该清楚,对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会造成内存泄露.而且用起来超级麻烦,我们往往在debug的时候,很大一部分时间在纠结手动释放内存的问题.虽然对于小型的程序来说手动管理内存不是问题,但一旦我们写的代码变得越来越庞大,我们便会开始越来越多地纠缠于内存管理的问题,而不是着力解决你的开发目标. 这,就有些舍本逐末的感觉了. 而自从OpenCV踏入2.0时代,用Mat