Ubuntu16.04 安装OpenCV&OpenCL
2017-03-29 23:30
405 查看
Ubuntu16.04 安装OpenCV&OpenCL
Summary概述
因为课程需要,我就按师兄要求在Ubuntu环境下安装了OpenCV 3.2.0、 intel版本和nvidia版本的OpenCL。所以,这篇文章记录了安装过程,最后还有测试是否安装成功。OpenCL介绍
//说些什么好呢一. 安装OpenCV3.2.0
安装OpenCV的过程可以说是比较简单,一般不会出什么错误。1.首先,安装一些依赖:
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake libeigen3-dev yasm libfaac-dev libtheora-dev libx264-dev libv4l-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev ffmpeg
2.然后在OpenCV的官网上下载3.2版本源码sources的压缩包。
3.下载好压缩包之后,解压压缩包到某文件夹(用windows习惯了,直接右键提取到此处。。。)
4.终端中cd到该解压缩的文件夹中,然后创建build文件夹 mkdir build
5.进入build目录 cd build
6.编译opencv源码:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
7.安装:
sudo make install
如下图所示:
最后,在终端检查opencv版本,如图所示,是opencv3.2.0
二. 安装intel cpu版本的OpenCL
因为我的电脑是intel CPU 和nividi GPU, 所以,如果希望使用Intel CPU作为并行设备,则必须安装Intel SDK,如果使用NVIDIA GPU作为并行设备,则必须安装NVIDIA SDK1.安装clinfo,clinfo是一个显示OpenCL平台和设备的软件,安装后,在命令行输入clinfo即可验证。`
sudo apt-get install clinfo
2.在intel官网上下载了intel SDK的tgz文件,并且解压。
3.安装依赖
sudo apt install dkms xz-utils openssl libnuma1 libpciaccess0 bc curl libssl-dev lsb-core libicu-dev sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list sudo apt-get update sudo apt-get install mono-complete
4.进入intel SDK解压目录,开始安装
sudo sh install_GUI.sh
按照提示信息安装,安装时可能会提示“Unsupported OS”,点击next无视掉。
安装
c49e
到“Installation summary”页面时,点击“Customize”自定义安装组件,选择除了“Set of OpenCL(TM) files for Android* target”以外的所有组件。
无视Missing libraries,next继续,点Install安装。
5.安装后,在命令行中输入clinfo就能看到intel的平台和设备。
三. 安装nvidia gpu版本的OpenCL
1.这里需要根据NVIDIA设备的型号来选择驱动版本,旧版本不支持新GPU,同样,新版本也可能会不支持旧GPU,我上网查询到一个快速简单的方法:点击系统设置->软件和更新->附加驱动,如下图所示,然后选择invidia私有驱动,退出并保存修改。2.在终端输入nvidia-settings,会打开nvidia 显卡的选项(或许这步还需要安装nvidia-settings、 nvidia-prime),可以切换nvidia 独显和intel 集显
3.安装与OpenCL有关的包
sudo apt-get install nvidia-<version here>-uvm nvidia-opencl-dev nvidia-modprobe nvidia-libopencl1-<version here> nvidia-opencl-icd-<version here>
4.安装CUDA toolkit
sudo apt-get install nvidia-cuda-toolkit
5.安装完成后,命令行中输入clinfo就可以看到已找到intel平台和CPU设备、NVIDIA平台和GPU设备。
四. 测试安装结果
下面是个入门程序,已经注释好了,注释包括了基本原理的解析,可以通过直接阅读和调试程序学习OpenCL了。本程序是读取电脑中的支持OpenCL的硬件nvidia和intel和AMD等信息,然后显示在屏幕上。程序代码 opencl_hello.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef MAC #include <OpenCL/cl.h> #else #include <CL/cl.h> #endif int main() { /* Host data structures */ cl_platform_id *platforms; //每一个cl_platform_id 结构表示一个在主机上的OpenCL执行平台,就是指电脑中支持OpenCL的硬件,如nvidia显卡,intel CPU和显卡,AMD显卡和CPU等 cl_uint num_platforms; cl_int i, err, platform_index = -1; /* Extension data */ char* ext_data; size_t ext_size; const char icd_ext[] = "cl_khr_icd"; //要使platform工作,需要两个步骤。1 需要为cl_platform_id结构分配内存空间。2 需要调用clGetPlatformIDs初始化这些数据结构。一般还需要步骤0:询问主机上有多少platforms /* Find number of platforms */ //返回值如果为-1就说明调用函数失败,如果为0标明成功 //第二个参数为NULL代表要咨询主机上有多少个platform,并使用num_platforms取得实际flatform数量。 //第一个参数为1,代表我们需要取最多1个platform。可以改为任意大如:INT_MAX整数最大值。但是据说0,否则会报错,实际测试好像不会报错。下面是步骤0:询问主机有多少platforms err = clGetPlatformIDs(5, NULL, &num_platforms); if(err < 0) { perror("Couldn't find any platforms."); exit(1); } printf("I have platforms: %d\n", num_platforms); //本人计算机上显示为2,有intel和nvidia两个平台 /* Access all installed platforms */ //步骤1 创建cl_platform_id,并分配空间 platforms = (cl_platform_id*) malloc(sizeof(cl_platform_id) * num_platforms); //步骤2 第二个参数用指针platforms存储platform clGetPlatformIDs(num_platforms, platforms, NULL); /* Find extensions of all platforms */ //获取额外的平台信息。上面已经取得了平台id了,那么就可以进一步获取更加详细的信息了。 //一个for循环获取所有的主机上的platforms信息 for(i=0; i<num_platforms; i++) { /* Find size of extension data */ //也是和前面一样,先设置第三和第四个参数为0和NULL,然后就可以用第五个参数ext_size获取额外信息的长度了。 err = clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, 0, NULL, &ext_size); if(err < 0) { perror("Couldn't read extension data."); exit(1); } printf("The size of extension data is: %d\n", (int)ext_size);//我的计算机显示224. /* Access extension data */ //这里的ext_data相当于一个缓存,存储相关信息。 ext_data = (char*)malloc(ext_size); //这个函数就是获取相关信息的函数,第二个参数指明了需要什么样的信息,如这里的CL_PLATFORM_EXTENSIONS表示是opencl支持的扩展功能信息。我计算机输出一大串,机器比较新(专门为了学图形学而购置的电脑),支持的东西比较多。 clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, ext_size, ext_data, NULL); printf("Platform %d supports extensions: %s\n", i, ext_data); //这里是输出生产商的名字,比如我显卡信息是:NVIDIA CUDA char *name = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, ext_size, name, NULL); printf("Platform %d name: %s\n", i, name); //这里是供应商信息,我显卡信息:NVIDIA Corporation char *vendor = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, ext_size, vendor, NULL); printf("Platform %d vendor: %s\n", i, vendor); //最高支持的OpenCL版本,本机显示:OpenCL1.1 CUDA 4.2.1 char *version = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, ext_size, version, NULL); printf("Platform %d version: %s\n", i, version); //这个只有两个值:full profile 和 embeded profile char *profile = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_PROFILE, ext_size, profile, NULL); printf("Platform %d full profile or embeded profile?: %s\n", i, profile); /* Look for ICD extension */ //如果支持ICD这一扩展功能的platform,输出显示,本机的Intel和Nvidia都支持这一扩展功能 if(strstr(ext_data, icd_ext) != NULL) platform_index = i; //std::cout<<"Platform_index = "<<platform_index<<std::endl; printf("Platform_index is: %d\n", platform_index); /* Display whether ICD extension is supported */ if(platform_index > -1) printf("Platform %d supports the %s extension.\n", platform_index, icd_ext); //释放空间 free(ext_data); free(name); free(vendor); free(version); free(profile); } if(platform_index <= -1) printf("No platforms support the %s extension.\n", icd_ext); /* Deallocate resources */ free(platforms); return 0; }
编译和执行(Linux):
1) gcc opencl_hello.c -lOpenCL 2) ./a.out
结果: 显示了intel平台和nvidia平台的信息
相关文章推荐
- ubuntu下安装环境 opencv&opencl
- Ubuntu16.04安装opencv2&&ImportError: No module named cv2.cv
- ubuntu16.04安装opencv3.1.0+Qt5.6.0
- Ubuntu16.04 安装OpenCV 错误解决 ffmpeg
- Ubuntu 16.04 系统中安装配置 OpenCV 2.4.3 的方法
- Ubuntu 16.04 安装opencv3及其扩展模块
- Ubuntu16.04下安装OpenCV3.0经验
- ubuntu16.04 安装 openCV3.1 问题
- ubuntu16.04下安装cuda8.0 和Opencv3.1
- 关于Ubuntu16.04安装opencv2.4.13及编译运行opencv程序的相关问题
- Ubuntu 16.04安装opencv3.1
- 基于Ubuntu16.04和Cuda8.0上安装OpenCV3.1.0
- Ubuntu16.04+matlab2014a+anaconda2+OpenCV3.1+caffe安装
- 在Ubuntu16.04安装OpenCV3.1并实现USB摄像头图像采集
- Ubuntu16.04 openCV3.1安装
- OpenCV 2.4.9在Ubuntu 12.04下的安装 && 移植到ARM上
- /usr/bin/ld: 找不到 -lippicv(ubuntu 16.04 LTS 安装opencv-3.1.0,含完整安装步骤)
- ubuntu16.04+ cuda8.0: 安装 opencv 3.0
- ubuntu16.04安装opencv3.1.0问题
- Ubuntu16.04 UltraEdit 安装&破解&使用