如何编译安装opencv?

基本要求:windows10,x64,vs2013.

Step1:安装软件

下载配置需要的文件。

http://pan.baidu.com/s/1bNQnYe

文件列表:

cmake-3.6.2-win64-x64.zip

cuda_7.5.18_win10.exe

opencv-3.1.0.exe

tbb43_20141023oss_win.zip

安装以上程序,其中tbb无须安装,解压文件到同一文件夹即可。

Enjoy it! 1

Step2:编译opencv with-cuda with-tbb

1)双击打开cmake-gui

Enjoy it! 2

2)选择要编译的文件目录

Enjoy it! 3

3)Configure

Enjoy it! 4

确认参数列表中 with_cuda
with_tbb 均已勾选

Enjoy it! 5

Enjoy it! 6

再次configure,确认没有红色选项出现

如果出现tbb_include_dirs选项标红 填写tbb include文件目录,再次configure即可。

Enjoy it! 7

然后按下generate按钮。

Enjoy it! 8

提示信息显示生成vs项目成功。

Step3:开始编译安装opencv

用Visual Studio 2013打开D:\Program Files\opencv\build2015目录下的OpenCV.sln文件。

0)首先选择zero_check 尝试编译

Enjoy it! 9

右键,生成,成功后开始正式编译。

Enjoy it! 10

  1. 同样开始对ALL_BUILD右键,生成.
  2. 接下来对 INSTALL 右键,生成。

注意:编译耗时较长。

Step4:测试opencv with-cuda是否可用

1)在viusalstudio2013中新建一个空项目,配置好opencv开发环境。

主要注意以下参数:

Enjoy it! 11

Enjoy it! 12

Enjoy it! 13

这里需要注意的是,项目平台须为64位.lib文件include文件均位于opencv\build2013\install文件夹中,配置与普通的opencv项目方法相同。

  1. 以下代码用于测试

//

// cudainfo.cpp

//

// Created by windows on 16/10/06.

// Copyright © 2016年 T2J. All rights reserved.

//

#include
“opencv2/core/core.hpp”

#include
“opencv2/cudaarithm.hpp”

#include
<iostream>

using
namespace std;

using
namespace cv;

using
namespace cv::cuda;

int main(){

    int num_devices = getCudaEnabledDeviceCount();

    for (int i = 0; i < num_devices; ++i)

    {

        cv::cuda::printShortCudaDeviceInfo(i);

        DeviceInfo dev_info(i);

        if (!dev_info.isCompatible())

        {

            std::cout << “CUDA module isn’t built for GPU #” << i << ” (“

                << dev_info.name() << “, CC “ << dev_info.majorVersion()

                << dev_info.minorVersion() << “\n”;

            return -1;

        }

    }

    return 0;

}

如能正确输出设备信息与cuda版本号,即为配置成功。

转载请注明来源:台佳佳.中国 » 如何编译安装opencv?
分享链接:http://xn--qrqa955a.xn--fiqs8s/?p=1617
除非另有声明,本网站采用知识共享“署名-非商业性使用-相同方式共享 (by-nc-sa) 3.0 中国大陆”许可协议授权。

Opencv程序优化方法

OpenMP并行程序设计—for循环并行化

  1. 开发环境配置

I was able to compile the program with VS2015 Community Version 14.0 Update 1 on Windows 8.1 64bit with OpenMP support.

Below, follow a list of steps that may help:

  • After create a new project and paste the source code, go to

Project-> Properties -> C/C++ -> Language

Change Open MP Support to Yes(/openmp)

Click Apply

  • On the left menu, go to Command Line and confirm that /openmp appears somewhere at the compiler’s options.

If it appears, click Ok and build the project.

  1. 程序如何优化

引入头文件 #include <omp.h>

对单个for循环使用并行计算

#pragma omp parallel for num_threads(4)

for (int i=0;i<4;i++)

{

}

对多个for循环使用并行计算

#pragma omp parallel num_threads(4)

{

for (int i=0;i<4;i++)

for (int j=0;j<4;j++)

}

Note:并行计算时注意并行数据之间的关联性。

  1. 能提高多少效率?

实际测试能提高40% 与CPU线程数量有关 测试数据链接

环境配置,代码优化等比较容易,效率提升比较明显

参考:http://blog.csdn.net/zhongkejingwang/article/details/40350027

OpenCV中GPU模块使用

1开发环境环境配置

在使用GPU模块之前,需要确认在使用CMake编译OpenCV时,勾选了选项WITH_CUDA和WITH_TBB使其生效生效。目前只支持NVIDIA显卡。

参考:http://blog.csdn.net/kelvin_yan/article/details/38866795

2 程序如何优化

1)验证OpenCV是否已启用GPU模块。

2)上传待处理数据到GPU (Mat –> GpuMat)。

3)调用OpenCV支持的GPU的处理函数。

4)下载处理结果到CPU (GpuMat —> Mat)。

其示例程序如下,完成颜色转换,BGR2GRAY

Enjoy it!

3 能提高多少效率?

GPU的并行处理的确很快,但数据在CPU和GPU之间的传递开销实在太大,往往影响了代码的整体效率。

单次高斯滤波函数的耗时,GPU是CPU的1/3~1/2,算上内存转换则会更慢。但如果进行10次高斯滤波,GPU的优势就能够得以体现,GPU的总耗时是CPU的1/5,如果执行100次滤波,则为1/10。 测试数据地址

执行单线程的做法,无疑会闲置非常多的并行计算资源,我们必须采用多线程,这样效率就会得到大幅度的提升。在GPU编程中,有一个叫掩藏Hide)的概念。它的意思是指线程因为访问存储器或者阻塞等其它原因造成的延迟,但由于分配的线程足够多,导致整体上看GPU仍然处于忙碌的状态。

总得来说,如果优化得当,opencv中的cuda模块提升效率是非常明显的(几乎100%的效率提升)。

Note:The first gpu function call is always takes more time, because CUDA initialize context for device. The following calls will be faster.

参考:

http://blog.csdn.net/kelvin_yan/article/details/38866795

http://blog.csdn.net/gamesdev/article/details/17535755

转载请注明来源:台佳佳.中国 » Opencv程序优化方法
分享链接:http://xn--qrqa955a.xn--fiqs8s/?p=1602
除非另有声明,本网站采用知识共享“署名-非商业性使用-相同方式共享 (by-nc-sa) 3.0 中国大陆”许可协议授权。

如何使用GPU提高程序运行速度

GPU是什么

显卡的处理器称为图形处理器(GPU),它是显卡的心脏,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的。

GPU计算能力非常强悍,举个例子:现在主流的i7处理器的浮点计算能力是主流的英伟达GPU处理器浮点计算能力的1/12

为什么GPU计算能力如此强?

下图对CPUGPU中的逻辑架构进行了对比。其中Control是控制器、ALU算术逻辑单元、Cachecpu内部缓存、DRAM就是内存。可以看到GPU设计者将更多的晶体管用作执行单元,而不是像CPU那样用作复杂的控制单元和缓存。从实际来看,CPU芯片空间的5%ALU,而GPU空间的40%ALU。这也是导致GPU计算能力超强的原因。

Enjoy it! 1

CUDA程序流程

Enjoy it! 2

GPU加速效果

下图是实现的基于CUDAP&D DEM图像预处理算法使用GPU的加速效果,GeForce GT 330是块普通台式机上的显卡,用它达到了20倍的加速比,Tesla M2075是比较专业的显卡,用它达到了将近百倍的加速比,这个程序i7 CPU单进程单线程要跑2个小时,而用Tesla M2075 GPU只花了一分多钟就完成计算。

Enjoy it! 3

数据源:http://www.cnblogs.com/LBSer/p/4592862.html

GPU同一时间可以处理逾1,000个以上的线程,运算速度较一般4核心处理器,最高可达100倍以上。

分享链接:http://xn--qrqa955a.xn--fiqs8s/?p=1599
除非另有声明,本网站采用知识共享“署名-非商业性使用-相同方式共享 (by-nc-sa) 3.0 中国大陆”许可协议授权。