最近在捣鼓图片相似性匹配算法。这里先说一点必要的题外话:

如果是在同一个object不同角度拍摄的多张图片中,使用SIFT可以有不错的效果;

如果是寻找类别相同的图片(可能不是同一object),SIFT是无效的。

前言:

  1 需要安装好opencv3.1.0 + opencv_contrib(放到 opencv主文件夹的module文件夹中)。

  2 可以使用IDE 比如:Codeblocks  or  Eclipse etc 配置好opencv开发所需要的 头文件 + lib so 库文件。

  但是我这里是直接手写的 g++ 编译命令,这样省事儿,可以方便展示。这里不得不吐槽一下,网上一大堆 搓逼教程,乱配置一气,有用的没用的全抄上,而且3.1.0中的imshow等基础的函数都已经换了头文件了。并不在highgui中了。所以我就自己手写了 编译命令,用什么加什么。

代码如下:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp> //头文件
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace cv; //包含cv命名空间
using namespace std; int main()
{
//Create SIFT class pointer
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
//读入图片
Mat img_1 = imread("kebe1.jpg");
Mat img_2 = imread("kebe2.jpg");
//Detect the keypoints
vector<KeyPoint> keypoints_1, keypoints_2;
f2d->detect(img_1, keypoints_1);
f2d->detect(img_2, keypoints_2);
//Calculate descriptors (feature vectors)
Mat descriptors_1, descriptors_2;
f2d->compute(img_1, keypoints_1, descriptors_1);
f2d->compute(img_2, keypoints_2, descriptors_2);
//Matching descriptor vector using BFMatcher
BFMatcher matcher;
vector<DMatch> matches;
matcher.match(descriptors_1, descriptors_2, matches);
//绘制匹配出的关键点lopencv_core
Mat img_matches;
drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);
imshow("【match图】", img_matches);
//等待任意按键按下
waitKey();
}
//g++ sift_match.cpp -o output -L/usr/local/lib -lopencv_imgcodecs -lopencv_highgui -lopencv_xfeatures2d -lopencv_features2d -lopencv_core -I/usr/local/include

  文件夹下有两张图片,使用最下面注释的 编译命令直接运行

./output 即可。

  发现这也不咋准啊! 当然我使用的不是同一张皂片的不同角度,只是觉得差不多。

  下一步,打算校准 + 具体实现使用SIFT来衡量图片的相似度。

  

最新文章

  1. C# 使用BackgroundWorker例子及注意点
  2. Struts2 Result 类型和对应的用法详解
  3. Des加解密算法
  4. 使用Topshelf快速搭建Windows服务
  5. lhgdialog: iframe页面里面的,确定,关闭、取消按钮的操作
  6. lua绑定c++的时候常见得错误
  7. 02 - Tomcat配置
  8. 如何让Div层悬浮在Flash Object对象之上(转载)
  9. Attributes(2): Displaying attributes for a class.(显示类属性)
  10. C++关联容器&lt;map&gt;简单总结
  11. smokeping报错Can&#39;t locate RRDs.pm in @INC (@INC contains
  12. cocos2d-x 3.0 新特性样例
  13. Python之路Day8
  14. android CountDownTimer
  15. android-自定义广告轮播Banner(无限循环实现)
  16. java web Servlet 学习笔记 -3 会话管理技术
  17. wpf编写一个简单的PDF转换的程序
  18. Exp1 PC平台逆向破解 20165235 祁瑛
  19. curl: (6) Could not resolve host: www.baidu.com;
  20. WPF Demo13 GridSplitter

热门文章

  1. 怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现
  2. JIRA运行太慢,修改JVM
  3. 32位与4G内存限制
  4. 2016/05/16 thinkphp3.2.2 验证码使用
  5. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) E. Prairie Partition 二分+贪心
  6. lsblk df
  7. bzoj3330: [BeiJing2013]分数
  8. YTU 1010: 目标柏林
  9. 关于Vim的一个配置文件
  10. CodeForces-204E:Little Elephant and Strings (广义后缀自动机求出现次数)