Linux系统下OpenCV2.x的安装与SIFT算法测试
来源:互联网 发布:初中生编程 编辑:程序博客网 时间:2024/06/08 11:00
OpenCV现在有1、2、3三个系列,1就比较老了,3在2的基础上增加了一些新的算法和T-API,但是没有了SIFT之类的算法,如果使用需要单独下载编译,目前基于2的资料和项目最多,所以新手建议使用OpenCV2。下面介绍详细的安装步骤和测试过程。
一、实验背景
(1)实验环境
系统为ubuntu 16.04.1 x64虚拟机版的最小化系统,具体参数如下:
1
2
3
4
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
为了支持opencv的图形显示功能,首先安装图形界面
1、执行命令sudo apt install ubuntu-desktop
2、安装后需要重启系统
二、安装过程和测试
1. 先从sourceforge上下载OpenCV的源码
Wget http://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
2. 解压到任意目录
我的为/lib/OpenCV
unzip opencv-2.4.9.zip
3. 进入源码目录,创建release目录
cd opencv-2.4.9
mkdir release
4. 可以看到在OpenCV目录下,有个CMakeLists.txt文件,需要事先安装一些软件
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev
5. 进入release目录,安装OpenCV是所有的文件都会被放到这个release目录下
cd release
6. cmake编译OpenCV源码,安装所有的lib文件都会被安装到/usr/local目录下
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. (指定安装目录)
7. 安装
sudo make install
8、建立链接库
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'(添加到系统链接库)
sudo ldconfig(生效)
9、编码
(1)SIFT代码:test.cpp
#include "opencv2/core/core.hpp" #include "highgui.h" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" using namespace cv; using namespace std; int main(int argc, char** argv) { //待匹配的两幅图像,其中img1包括img2,也就是要从img1中识别出img2 Mat img1 = imread("1.jpg"); Mat img2 = imread("2.jpg"); SIFT sift1, sift2; vector<KeyPoint> key_points1, key_points2; Mat descriptors1, descriptors2, mascara; sift1(img1,mascara,key_points1,descriptors1); sift2(img2,mascara,key_points2,descriptors2); //实例化暴力匹配器——BruteForceMatcher BruteForceMatcher<L2<float> > matcher; //定义匹配器算子 vector<DMatch>matches; //实现描述符之间的匹配,得到算子matches matcher.match(descriptors1,descriptors2,matches); //提取出前30个最佳匹配结果 std::nth_element(matches.begin(), //匹配器算子的初始位置 matches.begin()+29, // 排序的数量 matches.end()); // 结束位置 //剔除掉其余的匹配结果 matches.erase(matches.begin()+30, matches.end()); namedWindow("SIFT_matches"); Mat img_matches; //在输出图像中绘制匹配结果 drawMatches(img1,key_points1, //第一幅图像和它的特征点 img2,key_points2, //第二幅图像和它的特征点 matches, //匹配器算子 img_matches, //匹配输出图像 Scalar(255,255,255)); //用白色直线连接两幅图像中的特征点 imshow("SIFT_matches",img_matches); waitKey(0); return 0; }
(3)文件目录
(4)创建临时目录我的为opencvsifttest,进入该目录,创建 CMakeLists.txt文件,内容如下:
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage test.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
PROJECT(OpenCV_Example) //这是建立一个工程项目(类似于我们VS中建立C++项目一样),括号里面时工程名,工程名我们可以任意给,最后程序编译出来的可执行文件就是这个名字
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)//这是对CMake工具最低版本要求,这里我们要检查下我们的CMake工具的版本信息,我们可以使用命令“cmake --version”查看
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
FIND_PACKAGE( OpenCV REQUIRED ) //这是cmake用来查找opencv包用的,不用改
# Declare the target (an executable)
ADD_EXECUTABLE(OpenCV_Example Image_show.c) //这里括号里面的两个参数分别是工程项目名和我们要编译文件名的意思,记住中间一空格键隔开
TARGET_LINK_LIBRARIES(OpenCV_Example ${OpenCV_LIBS}) //这是我们链接到OpenCV库的环节,我们只要更改前面第一个参数位我们的工程项目名即可
#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}") //好了,就修改这么点东西,保存,关闭。
10、编译和执行
在opencvsifttest目录中执行以下命令:
cmake .
make
./DisplayImage
11、执行结果
12、参考
http://blog.csdn.net/surgewong/article/details/39078251
http://blog.csdn.net/laobai1015/article/details/53665444
http://notes.maxwi.com/2017/04/01/ubuntu-compile-opencv3-with-cuda-and-ffmpeg/
- Linux系统下OpenCV2.x的安装与SIFT算法测试
- Linux下OpenCV2.4.x的安装与配置
- opencv2.4 sift算法的使用
- OpenCV2.4.13 SIFT算法
- linux下libusb的安装与测试
- linux下libusb的安装与测试
- linux下libusb的安装与测试
- Linux 下 OpenCV2.0 的编译与安装 (ARM9)与(x86)
- Spark安装与测试(Linux系统下)
- 基于vs2008的OpenCV2.3.1配置及SIFT算法实现
- SIFT算法的c++实现(VS2010+OpenCV2.3.1)
- SIFT算法的c++实现(VS2010+OpenCV2.3.1)
- SIFT算法的c++实现(VS2010+OpenCV2.3.1)
- SIFT算法的c++实现(VS2010+OpenCV2.3.1)
- 基于vs2008的OpenCV2.3.1配置及SIFT算法实现
- Linux下安装OpenCV2.1
- linux下安装opencv2.4.9
- linux 下 opencv2.0 的编译与安装 …
- 记一次DG异常
- 项目开发的流程模块
- instanceof
- 打开r40平台tinav2.1下的AP6212A0版本的WIFI(分色排版)
- 字符串反转
- Linux系统下OpenCV2.x的安装与SIFT算法测试
- linux 用户限制
- Java 正则表达式
- python3 爬虫https的坑 -- 已解决
- node-web服务器简单搭建
- Oracle数据库使用pfile启动还是spfile启动---oracle
- git在push的时候出现insufficient permission for adding an object错误
- 配置snooping和ipsg遇到的特定IP的情况处理
- 职责链模式(chain of responsibility)c++版本