项目中需要用到C++调用OpenCV,之前使用VS2008和VS2013编译的,不知道为什么总是有错误,使用VS2015编译能够通过,还是要使用最新的工具啊。网上编译好的大都是x64的,但项目中为了方便移植要使用32位的工程生成32位的dll,只能自己编译了。自己总结了下,步骤如下。一些软件和资料自己上传了。可以在下面的链接中下载。
https://download.csdn.net/download/jiajiawozuihao/15907343
链接的压缩包包括如下文件:
1、下载opencv-3.4.7-vc14_vc15.exe并安装,安装后opencv\build下有个x64文件夹,里面是编译好的64位的vc14和vc15所用的库。但为了移植,项目中需要使用32位的库。于是需要自己编译。
2、下载cmake,打开cmake,检索到安装的opencv的源码路径及编译后的工程文件目录。
点击configure,选择VS2015,win32编译,如下所示,点击Finish后会开始启动编译,编译过程中会联网下载一些包,如果下载失败,可以CMakeDownloadLog.txt文件,查看网络地址,手动上网下载。下载后的文件会保存到源码文件夹下的.cache文件夹中。(我给的链接中也能下载)
我编译时有下面的一个红色警告:
CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):
CMake's 'find_host_package(PythonInterp 2.7)' founds wrong Python version:
把下面的选项注销掉,再次configure即可。
如果有其他需要修改的修改后再次configure。
点击Generate,生成工程成功后,点击open Project,打开工程。
3、打开工程后,选择release,“解决方案”上点击右键,打开配置管理器。选择INSTALL。这样生成解决方案后才会产生lib和dll以及include。
4、在ALL_BUILD上右键,点击生成。
编译完成后,再点击生成->生成解决方案。
在工程文件夹中的install文件中就是编译好的include头文件和lib、dll(在x86中)。
5、测试
新建win32控制台应用程序,把生成的include和x86两个文件夹拷贝到工程中,如下所示。
因为我生成的lib都是release的,所以使用lib时是在release下用的,如果是debug模式调用,会报opencv_xxxxd.dll找不到。添加dll的路径,否则执行时会说dll找不到。
添加头文件和库目录的路径。
添加lib库,包括:
opencv_core347.lib
opencv_calib3d347.lib
opencv_dnn347.lib
opencv_features2d347.lib
opencv_flann347.lib
opencv_highgui347.lib
opencv_imgcodecs347.lib
opencv_imgproc347.lib
opencv_ml347.lib
opencv_objdetect347.lib
opencv_photo347.lib
opencv_shape347.lib
opencv_stitching347.lib
opencv_superres347.lib
opencv_video347.lib
opencv_videoio347.lib
opencv_videostab347.lib
也可以编译成只有一个lib的,需要在cmake中选择如下:
或者在编译opencv时在配置管理中选择。实际结果都一样。
6、添加代码如下:
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
using namespace cv;
int main()
{
Mat img = imread("1.jpg", -1), thres_img;
if (img.empty()) return -1;
printf("%d, %d\n", img.cols, img.rows);
namedWindow("Example1", WINDOW_AUTOSIZE);
imshow("Example1", img);
threshold(img, thres_img, 128, 255, CV_THRESH_BINARY); //二值化处理
imshow("Example2", thres_img);
waitKey(0);
destroyAllWindows();
return 0;
}
编译启动后,如下所示: