OpenCV4.0+VS2017/OpenCV3.4.2 + Contrib3.4.2 + VS2013 + CMake3.12.1编译 代码验证/效果图及踩过的坑
原创独步天秤 最后发布于2019-04-09 17:05:39 阅读数 439 收藏
展开
Table of Contents
OpenCV4.0.0 + VS2017 + CMake3.12.1编译
OpenCV3.4.2 + VS2013 + CMake3.12.1编译
准备资料
CMake
VS编译
-
建议使用管理员身份打开opencv.sln
-
BUILD INSTALL
-
生成的结果
配置VS属性表
-
没有勾选BUILD_opencv_world:
-
勾选BUILD_opencv_world:
踩过的坑
代码验证
效果图
参考教程
OpenCV4.0.0 + VS2017 + CMake3.12.1编译
OpenCV4.0需要搭配VS2015(含)及以上版本才可以编译通过
配置选项汇总如下:
-
BUILD_SHARED_LIBS(默认是选中的)- 保持不变
-
选中BUILD_opencv_world【只生成一个opencv_world.dll】
-
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文件夹
-
本次选中OPENCV_ENABLE_NON_FREE选项。【专利算法模块,包含特征检测和GPU相关的内容】【3.2版本之后一定要选】
-
取消勾选BUILD_opencv_hdf【深度学习中的一种文件格式,暂时用不到,待以后需要再选】
-
需要提前下载的.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
所有标红色的都是可调整的参数,以下是重点:
-
BUILD_SHARED_LIBS(默认是选中的)- 保持不变
-
不需选中BUILD_opencv_world【VS2013+OpenCV3.4.2:我的CMake版本是3.12.1,可以选择;如果用CMake3.13就不能选,一选就失败】
-
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文件夹
-
本次选中OPENCV_ENABLE_NON_FREE选项。【3.2版本之后一定要选】
-
取消勾选BUILD_opencv_hdf【Python下的一种数据结构,暂时用不到,待以后需要再选】
再按一次configure【可能要很久,视你网络情况决定,因为要下载ffmpeg等文件】
等出现“Configuring done.” 并且所有红色标记部分都消失,再按Generate按钮。
等出现"Configuring done. Generating done",如下画面就可以 Open Project
VS编译
- 建议使用管理员身份打开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】
- BUILD INSTALL
Build->Batch Build-> INSTALL(Debug|Win32, Release|Win32)
、
我的版本也会有错误,是Python相关的,所以不用管。
- 生成的结果
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的区别,其他一样
- 没有勾选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即可
- 勾选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会帮忙处理好。
另外一个关键:确保网络畅通,科学上网
- 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就不能选,一选就失败】
- 【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
#include <ctype.h>
//命名空间
using namespace cv;
using namespace std;
using namespace xfeatures2d;
/*
class SIFT : public Feature2D {
public:
static Ptr 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
————————————————
版权声明:本文为CSDN博主「独步天秤」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yl_best/article/details/89152860