VS2013配置OpenCV,详细图文

OpenCV版本:opencv-2.4.9.exe

程序版本:默认为32位

 

特别注意,Release版本与Debug版本的lib不可混用,二者的区分方法是,Debug的lib文件文件名以‘d’结尾,而Release没有‘d’。混用会出现不可预知的异常。使用Debug调试时,切记属性中配置与平台都为Debug版本,即如下图


配置流程:

第一步:

安装OpenCV,安装过程实际就是解压过程,将OpenCV放置在合适目录后,添加适合VS版本的bin目录到系统环境变量中,版本对应关系为

vc10-->VS2008

vc11-->VS2010

vc12-->VS2013

         添加路径如下:D:\opencv\build\x86\vc12\bin

第二步:

         在项目中附加OpenCV头文件目录,如下图所示:

VS2013配置OpenCV,详细图文_第1张图片

三个路径分别为

D:\opencv\build\include;

D:\opencv\build\include\opencv;

D:\opencv\build\include\opencv2

第三步:

         配置库目录,如下图所示:

VS2013配置OpenCV,详细图文_第2张图片

注意,静态库目录与bin目录处于同一个文件夹,也就是说,系统Path中添加的bin必须与此处添加的lib的父目录相同。二者一个是lib一个是对应的dll,缺一不可。

第四步:

         添加lib依赖,注意,debug模式下,的lib文件名的末尾均有字母‘d’,如果使用程序为release模式,则需要将lib重新修改为名称末尾不含‘d’的lib。具体添加位置如下图所示:

VS2013配置OpenCV,详细图文_第3张图片

添加的lib文件列表如下:

opencv_ml249d.lib

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib

opencv_nonfree249d.lib

opencv_ocl249d.lib

opencv_photo249d.lib

opencv_stitching249d.lib

opencv_superres249d.lib

opencv_videostab249d.lib

末尾的数字249表示OpenCV的版本号,所以使用不同版本的OpenCV时,数字会有所不同,实际使用时,只需要批量替换即可。

第五步:

         OpenCV的Logger中打开文件使用的是fopen,但在VS2013中,使用fopen函数会直接被置为错误,并提示如下错误:fopen_s提供了文件的溢出检测,更加安全,但此刻却妨碍了程序顺利执行。


不需要修改代码,只需要在VS2013的预处理时,将此类错误抛除即可,修改方法如下:

VS2013配置OpenCV,详细图文_第4张图片

添加内容为 _CRT_SECURE_NO_WARNINGS。

测试程序:

//源码来自官方的 Tutorial,网址

//http://docs.opencv.org/2.4.9/doc/tutorials/features2d/feature_description/feature_description.html#feature-description

#include "stdafx.h"
#include 
#include 
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/features2d.hpp"

using namespace cv;
using namespace std;

void readme();

/** @function main */
int main()
{
	Mat c_src1 = imread("..\\pics\\3.jpg");
	Mat c_src2 = imread("..\\pics\\4.jpg");

	Mat img_1 = imread("..\\pics\\3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	Mat img_2 = imread("..\\pics\\4.jpg", CV_LOAD_IMAGE_GRAYSCALE);

	if (!img_1.data || !img_2.data)
	{
		return -1;
	}

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

	SurfFeatureDetector detector(minHessian);

	std::vector keypoints_1, keypoints_2;

	detector.detect(img_1, keypoints_1);
	detector.detect(img_2, keypoints_2);

	//-- Step 2: Calculate descriptors (feature vectors)
	SurfDescriptorExtractor extractor;

	Mat descriptors_1, descriptors_2;

	extractor.compute(img_1, keypoints_1, descriptors_1);
	extractor.compute(img_2, keypoints_2, descriptors_2);
	//--Step o1,draw key points on images
	Mat res1, res2;
	int drawmode = DrawMatchesFlags::DEFAULT;
	drawKeypoints(c_src1, keypoints_1, res1, Scalar::all(-1), drawmode);
	drawKeypoints(c_src2, keypoints_1, res2, Scalar::all(-1), drawmode);

	//-- Step 3: Matching descriptor vectors with a brute force matcher
	BFMatcher matcher(NORM_L2);
	std::vector< DMatch > matches;
	matcher.match(descriptors_1, descriptors_2, matches);

	//-- Draw matches
	Mat img_matches;
	drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);

	//-- Show detected matches
	imshow("descriptor1", res1);
	imshow("descriptor2", res2);

	imshow("Matches", img_matches);

	waitKey(0);

	return 0;
}

/** @function readme */
void readme()
{
	std::cout << " Usage: ./SURF_descriptor  " << std::endl;
}
略作修改,在原图中画出了特征点,使用特征为Surf即传说中SIFT的加速版,结果如下:

VS2013配置OpenCV,详细图文_第5张图片


Q&A




你可能感兴趣的:(机器学习基础算法,OpenCV,VS2013,配置)