软件安装——Ubuntu14.04+OpenCV3.1+contrib模块+测试

一、安装opencv3.1+contrib

  1. 安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
  1. 文件准备
  • 把U盘的opencv3.1和contrib模块拷贝出来,解压opencv3.1把U盘的opencv3.1和contrib模块拷贝出来,解压opencv3.1

  • 进opencv3.1目录,将contrib模块拷贝到该目录下,解压

  • 如果你使用cuda,在解压完了之后修改graphcut.cpp文件中第45行的位置
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000) 保存

  • 编译
    进入opencv3.1目录下在opencv3.1目录下

mkdir release
cd release
cmake ..

这里出现ippicv的时候断掉,复制ippicv到对应目录3rdparty/ippicv/downloads/linux808b791a6eac9ed78d32a7666804320e下,继续cmake

cmake -DBUILD_TIFF=ON -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=${HOME}/opencv-3.1.0/opencv_contrib-3.1.0/modules ..

然后

sudo make -j50
sudo make install 

看OpenCV版本

pkg-config --modversion opencv

二、测试

  1. CMakeLists
cmake_minimum_required(VERSION 2.8)
project(TEST)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

# 寻找OpenCV库
FIND_PACKAGE( OpenCV REQUIRED )
# 添加头文件
INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS} )

MESSAGE(STATUS "OpenCV library status:")
MESSAGE(STATUS "    version: ${OpenCV_VERSION}")
MESSAGE(STATUS "    libraries: ${OpenCV_LIBS}")
MESSAGE(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

set( SOURCE_FILES main.cpp )
add_executable( test ${SOURCE_FILES} )

# 链接OpenCV库
TARGET_LINK_LIBRARIES( test ${OpenCV_LIBS} )

  1. cpp文件
#include <iostream> 
#include <opencv2/opencv.hpp>   
#include <opencv2/xfeatures2d.hpp> 
using namespace cv;  
using namespace std; 

#define GOOD

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

	if(argc != 3){
        	printf("Usage: test <image1_path> <image2_path>\n");
        	return -1;
	}

	// Create SIFT class pointer 
	Ptr<Feature2D> f2d = xfeatures2d::SIFT::create(); 

	// load image 
	Mat img_1 = imread(argv[1]); 
	Mat img_2 = imread(argv[2]); 

	if (!img_1.data || !img_2.data){
        	printf("No image data.\n");
        	return -1;
	}

	// 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); 
	
	// 绘制匹配出的关键点 
	Mat img_matches; 

#ifdef GOOD
	sort(matches.begin(), matches.end());
	vector<KeyPoint> goodPts1, goodPts2;
	vector<DMatch> matchesVoted;
    	for (int i = 0; i<10; i++)
    	{
        	DMatch dmatch;
        	dmatch.queryIdx = i;
        	dmatch.trainIdx = i;

        	matchesVoted.push_back(dmatch);
        	goodPts1.push_back(keypoints_1[matches[i].queryIdx]);
        	goodPts2.push_back(keypoints_2[matches[i].trainIdx]);
    	}
	drawMatches(img_1, goodPts1, img_2, goodPts2, matchesVoted, img_matches, DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
#else
	drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches); 
#endif

	imshow("【match key points】", img_matches); 
	imwrite("1_kps_result.jpg", img_matches); 
	// 等待任意按键按下 
	waitKey(8000); 
	return 0;
}

  1. 两张图片
  2. 编译运行
./test ../1.jpg ../2.jpg
  1. 结果
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/83245339