之前老板已经编译好了OpenCV3.2.0 ,但是好像无法使用ocl模块?

所以我想应该是他当初编译的时候没有选择WITH_OPENCL,所以我决定重新编译一遍。

一、下载CMake并安装

1、我下载的是CMake3.4.0并安装完毕(教程网上有太多 就不重复);

但我运行./configure时出现:

解决办法:yum install ncurses-devel 如果下载不了,就自己手动下载:我是手动下载的:ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm (然后用rpm命令安装即可)。

2、安装cmake-gui

yum install cmake-gui

检验是否安装成功  :直接运行 cmake-gui  即可出现cmake界面

二、下载安装OpenCV

我是手动去官网下载OpenCV3.2.0.tar.gz的,然后解压在opencv-OpenCL-3.2.0文件夹下。

三、编译OpenCV-OCL

1、新建一个OpenCV3.2_With_OpenCL文件夹

2、终端下运行cmake-gui打开界面

3、像下面那样填写目录,开始编译:(等了很久)

我的出现这个错误:仔细看就是:

a.我试着手动下载这个红色部分提示缺少的文件:ippicv_linux_20151201.tgz

https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv/ippicv_linux_20151201.tgz  在这里下载。如果这个下载不了就在: http://download.csdn.net/download/chu_ying/9432287  下载。

然后,将刚才下载的文件直接拷贝进入opencv3.1源码的下面这个目录:opencv-OpenCL-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e

类似这个目录下。

b.终端下打开cmake-gui 点击configure  就会接着之前失败的地方进行(这次速度很快):

发现那个WITH_OPENCL竟然是自动选上的。

c.点击generate (速度比较快)(没有出现什么错误)

d.在文件夹OpenCV3.2_With_OpenCL下打开终端  运行 make  (出现很多东西 等待。。。)

类似这样的东西。。。感觉等待了一万年。。。

e.接着运行 make install

这样编译好的OpenCV3.2.0的lib和include原来都在usr/include/下面 ,去找就找到了。(其实最好不搞在这里 开始应该指定目录的)

可以在此运行 opencv_version -v  应该出现像我一样的画面:

这样创建工程时加上库路径和头文件路径等 就OK了。运行了一个简单例子,成功。

奇怪之处:在记录这篇文章之前 我的OpenCL版本是2.0的:

但这次编译之后却变成了1.2的了?tell me why????????哦我知道了,不是编译的原因,而是硬件原因:我的驱动是OpenCL2.0,但我的显卡是Rx 560不支持OpenCL 2.0 只支持OpenCL1.2 !!! ps:大神说:当前能支持OpenCL 2.0的是 AMD GPU基于GCN 1.1或更高版本架构的GPU,比如R9 285支持。R9 3XX很多都支持。另外就是Broadwell处理器架构或更新架构的Intel HD(或Iris) Graphics能支持。

刚刚查了下:GPU型号与OpenCL版本支持关系:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units

Chip series

Micro-architecture

Fab

Supported APIs

Introduced with

rendering

computing

Vulkan

OpenGL[4]

Direct3D

HSA

OpenCL

R100

fixed-pipeline

180 nm

150 nm

No

1.3

7.0

No

No

Original "ATI Radeon", as well as Radeon DDR, 7000, 7500, VE, and LE models

R200

programmable pixel&vertex pipelines

150 nm

1.4

8.1

8500, 9000, 9200 and 9250

R300

150 nm

130 nm

110 nm

2.0

9.0

11 (FL 9_2)

9500–9800, X300-X600, X1050

R420

130 nm

110 nm

9.0b

11 (FL 9_2)

X700–X850

R520

90 nm

80 nm

9.0c

11 (FL 9_3)

X1300–X1950

R600

HD 2000 series, HD 3410

RV670

55 nm

10.1

11 (FL 10_1)

ATI Stream APP[5]

HD 3450-3870, Mobility HD 2000 and 3000 series

RV770

55 nm

40 nm

1.0

HD 4000 series

Evergreen

HD 5000 series

Northern Islands

Southern IslandsGCN 1st gen

28 nm

1.0

4.5

11 (FL 11_1)

12 (FL11_1)

Yes

1.2, new driver 2.0 possible

HD 7000 series

Sea Islands

GCN 2nd gen

11 (FL 12_0)

12 (FL 12_0)

2.0 (2.1 in Beta and 2.2 with driver update)

Radeon 200 series

Volcanic Islands

GCN 3rd gen

Radeon 300 series

Arctic Islands

GCN 4th gen

14 nm

Radeon 400 series

Vega

Vega

12 (FL 12_1)

Radeon VEGA series

四、运行ocl的例子

但运行ocl的例子时还是报错说:oclMat 不是‘cv::ocl’成员  ??

最近谷歌打不开。

终于知道了:http://blog.csdn.net/jia20003/article/details/69802932  原来OpenCV3.x后使用UMat取代了OpenCV2.x的oclMat !难怪无论是我编译的还是之前老板编译的OpenCV3.2使用oclMat都错的!(不过发现还是要自己编译,最好不用老板编译好的,因为刚刚发现老板编译好的include下没有3rdparty更没有CL文件夹,所以想了下,如果不要用到opencv-ocl模块,还是可以用老板编译的版本;但如果要用opencv-ocl模块,还是用我自己编译的)用UMat就好了!UMat就是以前的oclMat!

1、UMat(ocl)小例子

按照这个人的介绍 UMat即是ocl,我的设备支持OpenCL,故启动UMat就是启动了GPU运行。 我这个例子应该是在GPU上,但耗时是341 ms。

2、对比原opencv程序

原来的纯CPU的程序:

这个耗时只要19ms!!!

3、对比我自己写的纯OpenCL程序

我自己写了一个纯OpenCL的腐蚀:

我这个耗时是129 ms!!!

当然这个没太多可比性,只是一个参考数据!因为UMat那个参杂了Mat到UMat的转化(需要时间),或者可能这个简单的运算并不适合GPU并行?!

后来看了 https://stackoverflow.com/questions/41688751/understanding-the-usage-of-opencl-in-opencv-mat-umat-objects

又用这个例子试了下:

#include

#include

#include

#include

using namespace cv;

using namespace cv::ocl;

using namespace std;

int main()

{

TickMeter tm;

tm.start();

//launch OpenCL environment...

std::vector<:ocl::platforminfo> plats;

cv::ocl::getPlatfomsInfo(plats);

const cv::ocl::PlatformInfo *platform=&plats[0];

//cout<name().c_str()<

cv::ocl::Device current_device;

platform->getDevice(current_device,0);

//cout<

current_device.set(0);

ocl::setUseOpenCL(true);

cv::UMat test_ocl_img;

imread("/home/jumper/Ecology_OpenCL/erodecontrasttest/test.bmp").copyTo(test_ocl_img);

cv::UMat test_gray_img(test_ocl_img.rows,test_ocl_img.cols,CV_8UC1);

cvtColor(test_ocl_img, test_gray_img, CV_BGR2GRAY);

threshold(test_gray_img, test_gray_img, 40, 255, 0);

imwrite("ocltemp.bmp",test_gray_img);

cv::UMat element_img;

getStructuringElement(MORPH_RECT, Size(2, 2)).copyTo(element_img);

erode(test_gray_img, test_gray_img, element_img);

tm.stop();

std::cout<

return 0;

}结果发现时间还是很慢啊!?

他还说:

通过Mat::getUMat()之后就获取一个UMat对象,同样在UMat对象操作期间,作为父对象Mat也会被LOCK直到子对象UMat销毁之后才可以继续使用。

OpenCV的官方文档说不鼓励在一个方法和一段代码中同时使用Mat与UMat两种方式,因为这样做真的非常危险。此外Mat与UMat还可以相互拷贝,但是这种方式也不是OpenCV官方提倡与推荐的,所以尽量别用这种方式。

参考了 http://www.cnblogs.com/emouse/archive/2013/02/22/2922940.html

opencv3.2教程linux,Linux编译OpenCV3.2.0-OCL模块并使用相关推荐

  1. linux centos 编译Lua5.2.0 静态库 动态库

    一 lua下载 lua5.2.0下载地址 :http://download.csdn.net/download/yzf279533105/10109818 二 笔者这里linux环境为centos6. ...

  2. python3.6.0安装教程-centos6.9安装python3.6.0和模块

    1.安装依赖包yum -y install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...

  3. linux如何编译boost指定库,linux下编译安装boost库

    linux下编译安装boost库 先看一下系统环境 Linux o-pc 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:15:15 UTC 2015 x ...

  4. Linux编译OpenCV3.2.0-OCL模块并使用

    之前老板已经编译好了OpenCV3.2.0 ,但是好像无法使用ocl模块? 所以我想应该是他当初编译的时候没有选择WITH_OPENCL,所以我决定重新编译一遍. 一.下载CMake并安装 1.我下载 ...

  5. 微星GS73VR 6RF + Linux Mint 18 + GTX1060 + CUDA8.0 + OpenCV3.0.0 + Caffe安装笔记

    1. 笔记本基本信息: 最近入手一台微星笔记本GS73VR 6RF, 双显卡: Intel的集显 + NVIDIA GTX1060, 本人用Ubuntu16.04尝试过安装 nvidia-367, n ...

  6. linux下编译libuv,linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github/,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $g ...

  7. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  8. linux 保存编译log,(转)Linux下编译安装log4cxx

    一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. 第一步安装apr-1.3.8,顺序不能错,它必须首 ...

  9. linux make编译卡死,为linux内核编译make文件时出现问题?

    我刚刚开始使用Linux内核开发,并且遇到了编译make文件的问题.为linux内核编译make文件时出现问题? 这是hello世界的教程. 我的HELLO-1.C文件 * * hello−1.c − ...

最新文章

  1. php 之 数据访问 增删改查
  2. 利用Github搭建自己的图床
  3. html标签的id中带有.号的获取方式
  4. GitHub的这个彩蛋我居然才知道,我OUT了
  5. 【转】Android 获取本机号码(收集)
  6. 得胜php100怎么样,优缺点评测得胜Q麦评价如何?怎么样呢?老司机透漏
  7. ORACLE中关于外键缺少索引的探讨和总结
  8. linux ntfs chkdsk,ntfs格式磁盘提示无法运行chkdsk解决办法
  9. 鸿蒙造化什么意思,大家说鸿蒙造化决,和鸿蒙天地有关系吗
  10. 解决Android Studio Import Sample网络连接失败问题
  11. 小米max2怎么长截屏?
  12. 微信云开发要避开的坑
  13. 400多个JavaScript特效大全
  14. kotlin学习之高阶函数及常用基本高阶函数
  15. 热模块替换/热更新 HMR
  16. Python.json.常见两个错误处理(Expecting , delimiter)(Invalid control character at)
  17. How to Rerun Failed Tests in JUnit?
  18. python自动下载酷狗音乐_使用Python下载酷狗音乐
  19. LoadRunner监控Oracle
  20. 马云:大数据时代,最重要的是做最好的自己

热门文章

  1. 读书的意义—献给第19个世界读书日
  2. 汇率查询接口,免费实时货币汇率查询换算
  3. 在头条号和西瓜视频发布视频,播放量20万,却是零收益?
  4. nginx如何替换ssl证书
  5. avaya基本配置方法
  6. 7-9 剥洋葱 (15 分)
  7. 客户资料搜索软件_手机自动拨号软件APP外呼系统 电脑拨号电话营销神器 CRM客户管理系统...
  8. 多线程 join 钉钉考勤
  9. 最新史上最大数据泄露,名为“Collection #1”的7.73亿数据!
  10. C++下opencv学习笔记(一)(图像的简单读取丶显示与存储)