OpenCV4.0+VS2017/OpenCV3.4.2 + Contrib3.4.2 + VS2013 + CMake3.12.1编译 代码验证/效果图及踩过的坑

Table of Contents

OpenCV4.0.0 + VS2017 + CMake3.12.1编译

OpenCV3.4.2 + VS2013 + CMake3.12.1编译

准备资料

CMake

VS编译

1. 建议使用管理员身份打开opencv.sln

2. BUILD INSTALL

3. 生成的结果

配置VS属性表

1. 没有勾选BUILD_opencv_world:

2. 勾选BUILD_opencv_world:

踩过的坑

代码验证

效果图

参考教程


OpenCV4.0.0 + VS2017 + CMake3.12.1编译

OpenCV4.0需要搭配VS2015(含)及以上版本才可以编译通过

配置选项汇总如下:

0. BUILD_SHARED_LIBS(默认是选中的)- 保持不变

1. 选中BUILD_opencv_world【只生成一个opencv_world.dll】

2. Contrib配置【大多数实验性代码,新的精彩算法,包含sift等】

笔者建议:【第一次INSTALL build时可以先不选这个,等普通版的OpenCV都build完,再来添加这个也可以】

我Contrib源码放至的路径  D:\software\OpenCV\SourceCode\opencv_contrib-4.0.0

OPENCV_EXTRA_MODULES_PATH填入D:\software\OpenCV\SourceCode\opencv_contrib-4.0.0\modules,

【注意】要选到modules文件夹

3. 本次选中OPENCV_ENABLE_NON_FREE选项。【专利算法模块,包含特征检测和GPU相关的内容】【3.2版本之后一定要选】

4. 取消勾选BUILD_opencv_hdf【深度学习中的一种文件格式,暂时用不到,待以后需要再选】

5. 需要提前下载的.cache文件共享在百度云盘上了,链接如下:

【待更新】

具体请参考下方OpenCV3.4+VS2013的编译过程。

OpenCV3.4.2 + VS2013 + CMake3.12.1编译

准备资料

opencv:版本3.4.2

 

https://github.com/opencv/opencv/releases【推荐从这个网址下载,建议下载release版】

https://github.com/opencv/opencv

【下载路径参考下图,master是最新版OpenCV,不要下错了,Contrib和它一样的下载方式】

opencv_contrib: 版本3.4.2

https://github.com/opencv/opencv_contrib/releases【推荐从这个网址下载,建议下载release版】

https://github.com/opencv/opencv_contrib

Cmake3.12.1

https://github.com/Kitware/CMake/releases?after=v3.13.1

CMake

诀窍:configure#1 -> configure#2 -> Generate -> Open Project

所有标红色的都是可调整的参数,以下是重点

0. BUILD_SHARED_LIBS(默认是选中的)- 保持不变

1. 不需选中BUILD_opencv_world【VS2013+OpenCV3.4.2:我的CMake版本是3.12.1,可以选择;如果用CMake3.13就不能选,一选就失败】

2. Contrib配置【包含sift等】

笔者建议:【第一次INSTALL build时可以先不选这个,等普通版的OpenCV都build完,再来添加这个也可以】

我Contrib源码放至的路径  D:\software\OpenCV\SourceCode\opencv_contrib-3.4.5\modules

OPENCV_EXTRA_MODULES_PATH填入D:\software\OpenCV\SourceCode\opencv_contrib-3.4.5\modules,

【注意】要选到modules文件夹

3. 本次选中OPENCV_ENABLE_NON_FREE选项。【3.2版本之后一定要选】

4. 取消勾选BUILD_opencv_hdf【Python下的一种数据结构,暂时用不到,待以后需要再选】

再按一次configure【可能要很久,视你网络情况决定,因为要下载ffmpeg等文件】


等出现“Configuring done.” 并且所有红色标记部分都消失,再按Generate按钮。

等出现"Configuring done. Generating done",如下画面就可以 Open Project

 

VS编译

1. 建议使用管理员身份打开opencv.sln

【.sln没法右击以管理员身份执行,所以需要另外找办法】

先从控制台以管理员身份运行

然后在控制台输入以下指令:

C:\Windows\system32>D: 【输入opencv.sln所在的盘符,注意有冒号】

D:\>cd D:\software\OpenCV\opencv342_VS2013   【切换到opencv.sln所在的文件夹】

D:\software\OpenCV\opencv342_VS2013>OpenCV.sln  【运行opencv.sln】

2. BUILD INSTALL

Build->Batch Build-> INSTALL(Debug|Win32, Release|Win32)

我的版本也会有错误,是Python相关的,所以不用管。

3. 生成的结果

install【生成的结果在这个文件夹下】

bin:OpenCV detector【不用看】

etc:里面是XML文件,用于保存预定义的结构

include:包含的头文件

X86:VC11是供VS2012使用的, VC12是供VS2013使用

 

配置VS属性表

参考文章《为VS2013/OpenCV配置属性-添加OpenCV不同版本的属性表》

【注意】如果是自己编译的OpenCV,则需要将...\install\x86\vc12\lib文件下的所有.lib写入。

我的是用CMake3.12.1 + OpenCV3.4.2+VS2013, 有两种情况,二者的区别是linker->Input的区别,其他一样

1. 没有勾选BUILD_opencv_world:

没有生成opencv_world342.lib,最后生成了88个lib,debug和release版各44个,所以把这些全部写进去

OpenCV342_debug:

opencv_aruco342d.lib
opencv_bgsegm342d.lib
opencv_bioinspired342d.lib
opencv_calib3d342d.lib
opencv_ccalib342d.lib
opencv_core342d.lib
opencv_datasets342d.lib
opencv_dnn342d.lib
opencv_dnn_objdetect342d.lib
opencv_dpm342d.lib
opencv_face342d.lib
opencv_features2d342d.lib
opencv_flann342d.lib
opencv_fuzzy342d.lib
opencv_hfs342d.lib
opencv_highgui342d.lib
opencv_imgcodecs342d.lib
opencv_imgproc342d.lib
opencv_img_hash342d.lib
opencv_line_descriptor342d.lib
opencv_ml342d.lib
opencv_objdetect342d.lib
opencv_optflow342d.lib
opencv_phase_unwrapping342d.lib
opencv_photo342d.lib
opencv_plot342d.lib
opencv_reg342d.lib
opencv_rgbd342d.lib
opencv_saliency342d.lib
opencv_shape342d.lib
opencv_stereo342d.lib
opencv_stitching342d.lib
opencv_structured_light342d.lib
opencv_superres342d.lib
opencv_surface_matching342d.lib
opencv_text342d.lib
opencv_tracking342d.lib
opencv_video342d.lib
opencv_videoio342d.lib
opencv_videostab342d.lib
opencv_xfeatures2d342d.lib
opencv_ximgproc342d.lib
opencv_xobjdetect342d.lib
opencv_xphoto342d.lib


OpenCV342_release:

把xxd.lib换成xx.lib即可

 

2. 勾选BUILD_opencv_world:

生成opencv_world342.lib,最后生成了4个lib,debug和release版各2个

release版:

opencv_img_hash342d.lib

opencv_world342d.lib

 

debug版:

opencv_img_hash342.lib

opencv_world342.lib

 

踩过的坑

1. Error in configuration process, project files may be invalid.

解决办法:首先确保你的source code下载的是否正确。

如果正确,那就坚定地点击CMake界面的“Configure”按钮即可,CMake会帮忙处理好。

另外一个关键:确保网络畅通,科学上网

2. LINK : fatal error LNK1104: cannot open file '..\..\lib\Debug\opencv_world345d.lib'

LINK : fatal error LNK1104: cannot open file '..\..\lib\Debug\opencv_img_hash345d.lib'

取消选中BUILD_opencv_world【VS2013+OpenCV3.4.2:我的CMake版本是3.12.1,可以选择;如果是CMake3.13就不能选,一选就失败】

3. 【opencv-4.0.0】……data: Download failed: 28;"Timeout was reached"……

CMake Warning at D:/software/OpenCV/SourceCode/opencv-4.0.0/cmake/OpenCVDownload.cmake:193 (message):
data: Download failed: 28;"Timeout was reached"
For details please refer to the download log file:
D:/software/OpenCV/opencv400_VS2013/CMakeDownloadLog.txt
Call Stack (most recent call first):
D:/software/OpenCV/SourceCode/opencv_contrib-4.0.0/modules/face/CMakeLists.txt:13 (ocv_download)

CMake Warning at D:/software/OpenCV/SourceCode/opencv_contrib-4.0.0/modules/face/CMakeLists.txt:26 (message):
Face: Can't get model file for face alignment.

解决办法:查看log file:

D:/software/OpenCV/opencv400_VS2013/CMakeDownloadLog.txt

发现

#do_copy "face_landmark_model.dat" "7505c44ca4eb54b4ab1e4777cb96ac05" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat" "D:/software/OpenCV/opencv400_VS2013/testdata/cv/face/"
#missing "D:/software/OpenCV/opencv400_VS2013/testdata/cv/face//face_landmark_model.dat"
#check_md5 "D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat"
#mismatch_md5 "D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat" "ada17020e35f0340a017d61f762b4084"
#delete "D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat"
#cmake_download "D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"

意思是没有成功下载……face_landmark_model.dat,原因是这个档案有点大70MB左右,需要去国外网站下载,不翻墙的话会timeout。

解决之道即是提前下载好。

下载地址是这个,CMakeDownloadLog.txt文件中有的。

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"

将其复制到浏览器中即可下载。

下载成功后将其复制到这个文件夹"D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/data/"中即可

以我的编译经历,通常会缺少这些资料,解决办法同上。

代码验证

//头文件
#include <opencv2/core/utility.hpp>
#include <opencv2/video/tracking.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>
#include <ctype.h>

//命名空间
using namespace cv;
using namespace std;
using namespace xfeatures2d;

/*
class SIFT : public Feature2D {
public:
static Ptr<SIFT> create (
int    nfeatures         = 0,    // 最大特征数(0,则算法将返回可以找到的所有特征)
int    nOctaveLayers     = 3,    // 每个Octave(图像金字塔中的图像)应该计算多少层(不同尺度的高斯卷积)
double contrastThreshold = 0.04, // 精细筛选的阈值(to filter out weak features)
double edgeThreshold     = 10,   // 精细筛选的阈值(to filter out "edge" features)
double sigma             = 1.6   // 图像的预光滑处理
);
int descriptorSize() const;        // descriptor size, always 128
int descriptorType() const;        // descriptor type, always CV_32F
...
};
*/


int main(int argc, char ** argv)
{
	Mat srcImage, gray, draw;

	// 读入一张图片,载入图像
	srcImage = imread("F:/images/lena.jpg");     //在程序中打开一张图片
	if (!srcImage.data)
	{
		printf("could not load image...\n");
	}
	char input_title[] = "input image";
	char output_title[] = "output image";
	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	// 显示载入的图片
	imshow(input_title, srcImage);

	//转为灰度图
	cvtColor(srcImage, gray, CV_BGR2GRAY);

	Mat descriptors;
	std::vector<KeyPoint> keypoints;
	//生产sift结构
	Ptr<SiftFeatureDetector> siftFD = SiftFeatureDetector::create();
	siftFD->detectAndCompute(gray, Mat(), keypoints, draw);
	drawKeypoints(gray, keypoints, gray, Scalar(0, 0, 255), DrawMatchesFlags::DEFAULT);

	//显示效果图 
	imshow(output_title, gray);

	// 【3】等待任意按键按下
	waitKey(0);
	return 0;
}

效果图

参考教程

51CTO 禾路老师的视频(免费)

VS2017+OpenCV4的编译和使用

《Windows环境下最新OpenCV代码的-下载-编译-使用》:OpenCV3 + VS2012

 

发布了85 篇原创文章 · 获赞 82 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/yl_best/article/details/89152860