Ask Your Question

How To Import External Library To OpenCV

asked 2015-07-09 10:25:09 -0600

openman gravatar image

I would like to extract features of images using opencv 3.0 with Visual Studio 2013.

My code:

#include <stdio.h>
#include <iostream>
#include "opencv2\core.hpp"
#include "opencv2\features2d.hpp"
#include <opencv2\xfeatures2d.hpp>
#include <opencv2\highgui.hpp>

using namespace cv;
using namespace cv::xfeatures2d;

void readme();

/** @function main */
int main(int argc, char** argv)
    if (argc != 3)
        readme(); return -1;

    Mat img_1 = imread(argv[1], IMREAD_GRAYSCALE);
    Mat img_2 = imread(argv[2], IMREAD_GRAYSCALE);

    if (! || !
        std::cout << " --(!) Error reading images " << std::endl; return -1;

    //-- Step 1: Detect the keypoints using SURF Detector
    int minHessian = 400;

    Ptr<SURF> detector = SURF::create(minHessian);

    std::vector<KeyPoint> keypoints_1, keypoints_2;

    detector->detect(img_1, keypoints_1);
    detector->detect(img_2, keypoints_2);

    //-- Draw keypoints
    Mat img_keypoints_1; Mat img_keypoints_2;

    drawKeypoints(img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    drawKeypoints(img_2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);

    //-- Show detected (drawn) keypoints
    imshow("Keypoints 1", img_keypoints_1);
    imshow("Keypoints 2", img_keypoints_2);


    return 0;

/** @function readme */
void readme()
    std::cout << " Usage: ./SURF_detector <img1> <img2>" << std::endl;


Cannot open include file: 'opencv2\xfeatures2d.hpp': No such file or directory

In C:\OpenCV3.0.0\opencv\build\include\opencv2

directory, there is no xfeatures2d.hpp file. Thus, I should import this library externally. How to fix it?

edit retag flag offensive close merge delete



The module xfeatures2d is in the OpenCV contrib repository.

Eduardo gravatar imageEduardo ( 2015-07-09 11:30:34 -0600 )edit

I kept track of the instructions in that link. I applied those commands: cd C:\OpenCV3.0.0\opencv\build cmake -DOPENCV_EXTRA_MODULES_PATH=C:\opencv_contrib-master\modules C:\OpenCV3.0.0\opencv\sources It creates an CMakeError.txt file including lots of errors.

openman gravatar imageopenman ( 2015-07-10 02:29:11 -0600 )edit

@openman, - it's probably a good idea, to start a new question now, and to add the cmake output there.

berak gravatar imageberak ( 2015-07-10 02:40:42 -0600 )edit

@openman Compiling opencv is a tedious business, you need to set a lot of options correctly depending on your system, so don't expect is to work out of the box.

themightyoarfish gravatar imagethemightyoarfish ( 2015-07-10 03:26:15 -0600 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2015-07-09 14:24:06 -0600

themightyoarfish gravatar image

For version 3.0, you will need to compile from source, including the contrib modules. In CMake, you would set the EXTRA_MODULES_PATH variable to the modules folder of the cloned contrib repo.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2015-07-09 10:25:09 -0600

Seen: 726 times

Last updated: Jul 09 '15