Windows下编译OpenCV+OpenCV_Contrib
0 OpenCV及OpenCV_Contrib1 准备工作2 CMake生成VS2017工程
2.1 OpenCV4.0.1 编译配置2.2 OpenCV_Contrib4.0.1编译配置2.3 生成工程 3 VS2017生成解决方案及安装文件4 VS2017配置OpenCV开发环境
4.1 配置环境变量4.2 VS2017工程包含(include)目录的配置4.3 VS2017工程库(lib)目录的配置4.4 链接库的配置 5 测试代码
5.1 导向滤波器(Guided Filter)5.2 SIFT特征5.3 SURF特征 参考文献
0 OpenCV及OpenCV_Contrib
OpenCV_Contrib是OpenCV的扩展模块,其中包含着一些新的算法(可能不稳定)和涉及知识产权保护的算法,OpenCV提供的windows下编译好的动态库并不包括OpenCV_Contrib中的算法,要想使用这些算法需要对OpenCV源码和OpenCV_Contrib源码进行编译,生成完整的动态库,而不是使用官方提供的已经编译好的动态库。 OpenCV对应版本下载链接 OpenCV_Contrib对应版本下载链接
1 准备工作
Windows10(可以上网) VS2017 CMake3.12.4 OpenCV4.0.1 OpenCV_Contrib4.0.1
1.3 cmake 下载 cmake-3.17.1-win64-x64.zip 压缩包,到 /bin 目录下,点击 cmake-gui 运行。 注:根据操作系统的不同,选择相应的版本,cmake 下载页 https://cmake.org/download/ 或 https://github.com/Kitware/CMake/releases
1.4 OpenCV 首先,选择 “Source code”,下载 GitHub 中的 OpenCV 源码 GitHub 链接 https://github.com/opencv/opencv/releases 其次,按照类似的步骤,在 GitHub 中下载 opencv_contrib 的源码压缩包
GitHub 链接 https://github.com/opencv/opencv_contrib/releases
最后,将两个 zip 包解压缩,等待编译。
2 CMake生成VS2017工程
2.1 OpenCV4.0.1 编译配置
1 打开CMake,设置“where is the source”目录为OpenCV文件夹中的source目录;2 设置“where to build binaries”目录为自己新建的编译目录,英文路径;3 点击Configure,弹出对话框选择VS版本。 4 选择对应的VS版本,并选择win64,点击Finish。 5 等待第1次配置完成,发现有些项是红色的,需要再点击一次configure,发现红色的项变为白色,即完成OpenCV的编译配置。
2.2 OpenCV_Contrib4.0.1编译配置
1 设置“OPENCV_EXTRA_MODULES_PATH”的值为opencv_contrib文件夹中的modules 注意目录不能用左斜线,需要用右斜线,否则后续会出现错误!!!
2 使“WITH_CUDA”选项未被选中
3 使“OPENCV_ENABLE_NONFREE”选项为勾选状态
4 使“BUILD_opencv_world”选项为勾选状态,则最终只生成一个动态库。
5 点击Configure,第1次配置完成后有选项为红色,再次点击Configure,则红色变为白色,OpenCV_Contrib编译配置完成。
2.3 生成工程
1 点击Generate,生成VS工程。
2.4 Python 问题
因为电脑中装了 Python 3.6.4,结果在下面步骤的 Debug 模式下,生成时出现了如下错误:
这是因为安装 python 时,并不会安装 debug 版本,于是,回到 python 安装界面,选择 debug 版本
如此,则可在 debug 模式下,顺利生成相应的库文件
3 VS2017生成解决方案及安装文件
1 打开第二步生成的OpenCV.sln,并选择Debug x64调试环境,依次点击生成—>生成解决方案。 2 等待一段时间得到如下结果。 3 右键点击CMakeTargets下的INSTALL—>仅用于此项目—>仅生成INSTALL,最终在install目录下生成编译好的Debug库。
4 将Debug改为Release,再依次点击生成—>生成解决方案,等待一段时间结果如下。 5 右键点击CMakeTargets下的INSTALL—>仅用于此项目—>仅生成INSTALL,最终在install目录下生成编译好的Release库。
将 install 目录下生成的所有文件,拷贝到需要进行 OpenCV 配置的文件夹中
4 VS2017配置OpenCV开发环境
4.1 配置环境变量
【此电脑】—>【(右键)属性】—>【高级系统设置】—>【高级(标签)】—>【环境变量】—>(双击)系统变量中的Path—>在变量值里面添加相应的路径。
4.2 VS2017工程包含(include)目录的配置
4.3 VS2017工程库(lib)目录的配置
4.4 链接库的配置
5 测试代码
5.1 导向滤波器(Guided Filter)
using namespace cv
;
int main
()
{
Mat guidanceImage
= imread
("tiananmen1.bmp",0);//读取灰度图
if (!guidanceImage
.data
)
{
std
::cout
<< "Guidance Image is empty" << std
::endl
;
return -1;
}
imshow
("Guidance",guidanceImage
);
Mat srcImage
= imread
("transmission.jpg",1);
if (!srcImage
.data
)
{
std
::cout
<< "Source Image is empty" << std
::endl
;
return -2;
}
imshow
("input",srcImage
);
Mat res
;
ximgproc
::guidedFilter
(guidanceImage
, srcImage
, res
, 30,0.001,-1);
imshow
("result", res
);
waitKey
(0);
return 0;
}
5.2 SIFT特征
using namespace cv
;
int main
()
{
Mat srcImage
= imread
("right.jpg", 1);
if (!srcImage
.data
)
{
std
::cout
<< "Source Image is empty" << std
::endl
;
return -1;
}
imshow
("srcImage", srcImage
);
Ptr
<Feature2D
> sift
= xfeatures2d
::SIFT
::create
();
std
::vector
<KeyPoint
> keypoints
;
Mat descriptors
;
sift
->detectAndCompute
(srcImage
, noArray
(), keypoints
, descriptors
);
drawKeypoints
(srcImage
, keypoints
, descriptors
, Scalar
(0, 255, 0));
imshow
("sift", descriptors
);
waitKey
(0);
return 0;
}
5.3 SURF特征
using namespace cv
;
int main
()
{
Mat srcImage
= imread
("right.jpg", 1);
if (!srcImage
.data
)
{
std
::cout
<< "Source Image is empty" << std
::endl
;
return -1;
}
imshow
("srcImage", srcImage
);
Ptr
<Feature2D
> surf
= xfeatures2d
::SURF
::create
();
std
::vector
<KeyPoint
> keypoints
;
Mat descriptors
;
surf
->detectAndCompute
(srcImage
, noArray
(), keypoints
, descriptors
);
drawKeypoints
(srcImage
, keypoints
, descriptors
, Scalar
(0, 255, 0));
imshow
("surf", descriptors
);
waitKey
(0);
return 0;
}
参考文献
[1] OpenCV3.4.1+opencv_contrib编译:windows10 [2]OpenCV - Windows(win10)编译opencv + opencv_contrib