配置OpenCV2和OpenCV3开发环境笔记
2016-01-20 14:21
232 查看
配置OpenCV2和OpenCV3开发环境笔记
Date: 2016-01-19Author: Kagula
Environment:
Visual Studio 2013 Update5, OpenCV 2.4.11, OpenCV 3.1.0, GTX960, CUDA 7.5.18
Prologue:
如何搭建OpenCV 2.4.11、OpenCV 3.1.0的开发环境。
OpenCV 2.4.11是从官网直接下载已经编译好的包。
OpenCV 3.1.0是从官网下载源代码自己编译(据说支持CUDA的lib得自己编译)。
这里最坑的是,官网的例子没有更新,后来还是在参考资料[4]中找到了正确的示例代码。
第一部份:确认开发环境没有异常(OpenCV 2.4.11)
新建空的win32 console solution,配置project属性。头文件搜索路径
D:\sdk\OpenCV2411\opencv\build\include;
库文件搜索路径
D:\sdk\OpenCV2411\opencv\build\x86\vc12\lib;
依赖库
opencv_calib3d2411d.lib
opencv_contrib2411d.lib
opencv_core2411d.lib
opencv_features2d2411d.lib
opencv_flann2411d.lib
opencv_gpu2411d.lib
opencv_highgui2411d.lib
opencv_imgproc2411d.lib
opencv_legacy2411d.lib
opencv_ml2411d.lib
opencv_nonfree2411d.lib
opencv_objdetect2411d.lib
opencv_ocl2411d.lib
opencv_photo2411d.lib
opencv_stitching2411d.lib
opencv_superres2411d.lib
opencv_ts2411d.lib
opencv_video2411d.lib
opencv_videostab2411d.lib
使用下面的代码测试
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2\imgproc\imgproc.hpp> #include "counter.h" using namespace cv; using namespace std; int main(int argc, char* argv[]) { try { cv::Mat src = cv::imread("C:\\Users\\kagula\\Pictures\\a.jpg", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat dst; // startTiming(); cv::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY); //Visual studio in Debug mode, Core i7-4790k, GTX960 //take time is 0.200711ms cout << "take time is " << stopTiming() << "ms" << endl; //cv::imshow("Result", dst); //cv::waitKey(); cin.get(); } catch (const cv::Exception& ex) { std::cout << "Error: " << ex.what() << std::endl; } return 0; }
确认当前OpenCV开发环境正常。
第二部份:确认下CUDA环境正常(需要OpenCV3)
第一步:建立CUDA开发环境在下面网址查到GTX960兼容CUDA 5.2。Quadro K600兼容3.0。
https://developer.nvidia.com/cuda-gpus#collapse4
在下面网址下载并安装CUDA开发工具
http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_windows.exe http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/cudatoolkit_3.1_win_64.exe
第二步:使用CMake编译出OpenCV 3.1.0
注意要选择visual studio 12 2013 Win64.
否则会报
CUDA_nppc_LIBRARY
CUDA_nppi_LIBRARY
CUDA_npps_LIBRARY
三个环境变量问题,那是因为它们,Nvidia只提供64位库。
Core i7-4790K要编译二个多小时,请耐心等待。
"D:\sdk\opencv-3.1.0\opencv-3.1.0\include"少头文件的问题。
把“D:\sdk\opencv-3.1.0\opencv-3.1.0\modules\XXX\include”下(至少有十多个)的文件复制到
“D:\sdk\opencv-3.1.0\opencv-3.1.0\include”其中“D:\sdk\opencv-3.1.0”是我解压路径。
最后一步:
新建空的Win32 Console Solution,并修改缺省platform为Win64。
现在设置项目的属性
头文件搜索路径
D:\sdk\opencv-3.1.0\opencv-3.1.0\include;
库文件搜索路径
D:\sdk\opencv-3.1.0\opencv-3.1.0\build_vs2013\lib\Debug;
Debug模式下的依赖库
opencv_calib3d310d.lib
opencv_core310d.lib
opencv_cudaarithm310d.lib
opencv_cudabgsegm310d.lib
opencv_cudacodec310d.lib
opencv_cudafeatures2d310d.lib
opencv_cudafilters310d.lib
opencv_cudaimgproc310d.lib
opencv_cudalegacy310d.lib
opencv_cudaobjdetect310d.lib
opencv_cudaoptflow310d.lib
opencv_cudastereo310d.lib
opencv_cudawarping310d.lib
opencv_cudev310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_photo310d.lib
opencv_shape310d.lib
opencv_stitching310d.lib
opencv_superres310d.lib
opencv_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
Dll复制
"D:\sdk\opencv-3.1.0\opencv-3.1.0\build_vs2013\bin\Debug"下的DLL复制到
我们solution的Debug目录下。
下面是测试OpenCV3.1.0的源码
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/cudaarithm.hpp> #include "counter.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { try { //png图片会抛出异常 cv::Mat src_host = cv::imread("C:\\Users\\kagula\\Pictures\\a.jpg", CV_LOAD_IMAGE_GRAYSCALE); startTiming(); cv::cuda::GpuMat dst, src; src.upload(src_host); // cv::cuda::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY); // cv::Mat result_host; dst.download(result_host); //Visual studio in Debug mode, Core i7-4790k, GTX960 //take time is 2612.96ms, Release mode 520.587ms. cout << "take time is " << stopTiming() << "ms" << endl; //cv::imshow("Result", result_host); //cv::waitKey(); cin.get(); } catch (const cv::Exception& ex) { std::cout << "Error: " << ex.what() << std::endl; } return 0; }
成功编译并通过。
发现OpenCV3 with CUDA要比OpenCV2 with cpu慢上千倍,主要是多了数据upload和download的时间。
参考资料
[1]《在CentOS系统上编译、安装、配置OpenCV》
http://blog.csdn.net/dupei/article/details/6430766
[2]《CUDA Zone》官网地址
https://developer.nvidia.com/cuda-zone
[3]《OpenCV 3.1.0文档》
http://docs.opencv.org/3.1.0/
[4]如何编译OpenCV3.1.0写的比我细。
http://johnhany.net/2015/10/windows7-compile-opencv3-with-cuda/
补充读物
[1]《OpenACC Toolkit》
https://developer.nvidia.com/openacc
[2]一些OpenCV如何使用的介绍
http://www.opencv.org.cn
[3]《OpenCV中GPU模块使用》
http://www.cnblogs.com/dwdxdy/p/3244508.html
[4]《OpenCV学习:将图像转为二值图像(函数cvtColor和函数threshold)》
http://blog.sina.com.cn/s/blog_59fabe030101ib67.html
常见问题
Q1 The library is compiled without CUDA support in function EmptyFuncTable::mallocPitch
A
http://stackoverflow.com/questions/32774673/no-gpu-support-using-opencv-2-4-10-cuda-7-5-w10
Q1 找不到cv::gpu::threshold定义的问题
A
http://johnhany.net/2015/10/windows7-compile-opencv3-with-cuda/
补充
[1]如果要全局设置头文件和库文件搜索路径,据说可在[Visual Studio]->[View]->[Propery Manager]中设置。
有时间再测试。
相关文章推荐
- OPENCV2学习(1)_生成运动模糊核(OPENCV2 实现Matlab中fspecial的motion功能)
- 在win10中python3安装opencv3
- OpenCV2 使用分水岭算法对图像分割的个人理解 cv::watershed()
- opencv2灰度图像的变换
- opencv2学习笔记:4.2计算图像直方图
- opencv2 cv::Mat 释放内存时 release()的错误
- opencv2 在mfc窗口中显示关于cv::Mat 的解决方法
- ubuntu opencv3 安装
- opencv2 circle rectangle
- 视频播放程序改良
- 实现图像处理算法中采用策略“Strategy”模式+Qt中相对路径
- opencv 机器学习 SVM 支持向量机初探+Fourier Discriptor特征分类
- OpenCV_contrib配置
- 利用OpenCV3进行鱼眼镜头标定
- eclipse配合opencv的设置
- OpenCV SIFT特征学习:(一)初识SIFT
- OpenCV SIFT特征学习:(二)SIFT匹配
- OpenCV SIFT特征学习 (三) 特征如何更好的匹配(上)
- opencv中RGB转HSV
- 使用Opencv2出现logger.h(66): error C4996:fopen