配置OpenCV2和OpenCV3开发环境笔记

来源:互联网 发布:网络交易计积分信用卡 编辑:程序博客网 时间:2024/06/10 00:35

配置OpenCV2和OpenCV3开发环境笔记

Date: 2016-01-19
Author: 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.200711mscout << "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慢上千倍,主要是多了数据uploaddownload的时间。


参考资料
[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

http://stackoverflow.com/questions/32774673/no-gpu-support-using-opencv-2-4-10-cuda-7-5-w10
Q1 找不到cv::gpu::threshold定义的问题

http://johnhany.net/2015/10/windows7-compile-opencv3-with-cuda/


补充
[1]如果要全局设置头文件和库文件搜索路径,据说可在[Visual Studio]->[View]->[Propery Manager]中设置。
有时间再测试。
0 0