ubuntu 14.04 下利用apt-get方式安装opencv

原创 2016年10月06日 22:17:31
  • 标签:
  • opencv /
  • ubuntu /
  • 25750
  • 编辑
  • 删除

ubuntu 14.04 下利用apt-get方式安装OpenCV

标签(空格分隔): Linux学习 OpenCV


  • ubuntu 1404 下利用apt-get方式安装opencv
  • ubuntu 1404 下利用apt-get方式安装OpenCV
  • 前言
  • 安装方法
  • opencv被安装在了哪里
    • 1 opencv的安装源文件
    • 2 opencv相关的头文件的安装位置
    • 3 opencv的相关动态链接库的安装位置
  • 4 linux下的opencv和windows下的opencv文件
  • 测试代码
    • 1 源码
  • 2 make
  • 3 测试程序

1.前言

相比于源代码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少一些。通过apt方式安装没有自动生成opencv.pc文件,所以在编写makefile文件时不能直接使用pkg-config工具,而需要逐个指定opencv_core、opencv_imgproc等动态链接库!

2.安装方法

  • 更新ubtuntu系统软件源
sudo apt-get update
  • 1
  • 安装opencv
sudo apt-get install libcv-dev
  • 1
  • 这个安装过程大概需要几分钟,安装完成后得到如下结果

3. opencv被安装在了哪里?

3.1 opencv的安装源文件

  • apt-get install **这样的命令会下载文件放在 /var/cache/apt/archives目录下,然后安装。可以看到,opencv相关的.deb文件都在该目录下;如下图所示,原始的/var/cache/apt/archives目录下只有文件夹partial和文件lock,但由于此时下载了opencv的相关安装文件,发现该文件夹下多个大量的deb安装文件!

  • 实际上,执行完以上的安装过程,这些archives路径下的文件是可以直接删除的!因为相关的安装已经结束,不再需要安装文件了

    • 安装上面这种apt-get install的方式,会使得/var/cache/apt/archives这个目录所占空间会越来越大
    • 但幸运的是apt提供了相应的管理工具apt-get clean来删除文件目录/var/cache/apt/archives/和文件目录 /var/cache/apt/archives/partial/下所有包(锁定的除外)。
    • 执行举例:
      执行如下命令

      可以发现,刚刚下载的所有关于opencv的文件都被删除了

3.2 opencv相关的头文件的安装位置

opencv相关的头文件被安装到/usr/lib目录中,该目录是linux默认头文件查找路径。

3.3 opencv的相关动态链接库的安装位置

  • linux下的动态链接库文件即.so文件

  • opencv的相关动态链接库被安装到/usr/lib目录中。这些动态链接库包括:
    【opencv_calib3d】——相机校准和三维重建
    【opencv_core】——核心模块,绘图和其他辅助功能
    【opencv_features2d】——二维特征检测
    【opencv_flann】——快速最邻近搜索
    【opencv_highgui】——GUI用户界面
    【opencv_imgproc】——图像处理
    【opencv_legacy】——废弃部分
    【opencv_ml】——机器学习模块
    【opencv_objdetect】——目标检测模块
    【opencv_ocl】——运用OpenCL加速的计算机视觉组件模块
    【opencv_video】——视频分析组件

  • 下图是/usr/lib文件夹中与opencv相关的文件,例如,第一个和第二个文件分别为机器学习模块对应的静态态链接库文件(libopencv_ml.a)和动态链接库文件(libopencv_ml.so)

3.4 linux下的opencv和windows下的opencv文件

  • windows下下载得到的opencv解压文件包含2个文件夹:source+build

    • source:opencv的源代码(opencv是开源的),下面的build文件夹下的各种库就是在这些源代码的基础上利用cMake得到的(实际上,该source文件夹除了可以编译得到下面的build中的动态链接库和静态链接库外,在实际调用opencv相关库时,并不需要!)
    • build:存放的opencv**预编译好的各种库(**DLL(动态链接库)lib库(静态链接库)),对于使用opencv的使用者来说,只使用该文件夹就够了,不需要自己利用opencv的源代码重新编译得到这些库
  • linux下载得到的是.deb解压缩后也可以得到动态链接库和静态链接库

    在ubuntu中, .so文件即为动态链接库文件,对应于windows下的dll文件
    在ubuntu中, .a文件对应于windows下的lib文件;实际上,该文件就是普通的函数通过编译之后得到(在高翔的SLAM教程第2章有一个关于如何编译得到静态链接库的简单小例子)

实际上,无论是在任何操作系统下,我们需要使用opencv的相关库时,使用的都仅仅是它的动态链接库和静态链接库

4. 测试代码

4.1 源码

  • 建立名称为test.cpp的c++文件,内容如下
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main (int argc, char **argv)
{Mat image, image_gray;image = imread(argv[1], CV_LOAD_IMAGE_COLOR );if (argc != 2 || !image.data) {cout << "No image data\n";return -1;}cvtColor(image, image_gray, CV_RGB2GRAY);namedWindow("image", CV_WINDOW_AUTOSIZE);namedWindow("image gray", CV_WINDOW_AUTOSIZE);imshow("image", image);imshow("image gray", image_gray);waitKey(0);return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 建立名称为Makefile的文件,输入如下内容
CC = g++
# 可执行文件
TARGET = test
# C文件
SRCS = test.cpp
# 目标文件
OBJS = $(SRCS:.cpp=.o)
# 库文件
DLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui
# 链接为可执行文件
$(</span><span class="hljs-constant">TARGET</span>)<span class="hljs-symbol">:</span><span class="hljs-variable">$(OBJS)$(</span><span class="hljs-constant">CC</span>) -o <span class="hljs-variable">$@ $^</span> <span class="hljs-variable">$(DLIBS)
clean:rm -rf $(</span><span class="hljs-constant">TARGET</span>) <span class="hljs-variable">$(OBJS)
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件
%.o:%.cpp$(</span><span class="hljs-constant">CC</span>) -o <span class="hljs-variable">$@ -c $<
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

××××××
注意1:
12行、14行、17行前面为Tab,而非空格,否则会出现“makefile:12: *** 遗漏分隔符 。 停止。”这样的错误

注意2:
由于示例中使用了opencv中的核心部分(opencv_core)、图像处理部分(opencv_imgproc)和GUI部分(opencv_highgui),所以依次增加opencv_core、opencv_imgproc、opencv_highgui动态链接库。
即由DLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui语句实现

4.2 make

cd 文档  # 进入程序所在目录
make 
  • 1
  • 2

产生了两个文件:test文件和test.o文件

4.3 测试程序

./test lena.bmp
  • 1

运行结果

上面程序test的作用就是将输入的图像转换为灰度图像,可以看到,程序实现了该功能,也就证明了opencv安装成功


参考文献
[1] 树莓派学习笔记——apt方式安装OpenCV
[2] apt-get下载的文件放在哪个目录


http://www.taodudu.cc/news/show-1638318.html

相关文章:

  • 读caffe源码:gflags的使用
  • google protobuf的简介、安装和使用
  • 自动驾驶领域常用的数据集(检测,分割,定位)
  • PCL Lesson1 :PCL库PCLVisualizer的简单使用
  • PCD Lesson2:PCD文件的write
  • PCD Lesson3:PCD文件的读取
  • PCL Lesson 4:直通滤波+多视图可视化
  • PCL Lesson5: 直通滤波+空间平面拟合+提供原始点云数据集PCD文件
  • PCL Lesson6:Eigen基础
  • top 并grep 特定信息打印至txt
  • PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归
  • PyTorch 入坑四 梯度、链式法则、计算图与反向传播
  • PyTorch 入坑五 autograd与逻辑回归
  • PyTorch 入坑六 数据处理模块Dataloader、Dataset、Transforms
  • PyTorch 入坑七:模块与nn.Module学习
  • PyTorch 入坑八:卷积与转置卷积
  • PyTorch 入坑九:权重初始化
  • PyTorch 入坑十一: 损失函数、正则化----深刻剖析softmax+CrossEntropyLoss
  • C/C++基础一:stack heap
  • jupyter notebook + 服务器中docker 使用配置
  • VScode+远程服务器docker+C/C++ 代码挑战配置
  • 相机模型-Extended Unified Camera Model
  • 视觉slam学习笔记以及课后习题《第三讲李群李代数》
  • 机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)
  • 机器视觉——鱼眼相机成像模型
  • 机器视觉——单目相机模型(坐标标定以及去畸变)
  • 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》
  • 如何解决VC++ 6.0 在win7下的兼容性问题
  • c#调用c++dll找不到入口点,一秒搞定
  • EnterCriticalSection 多线程操作相同数据遇到的问题(线程锁)

ubuntux学习日记相关推荐

  1. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

  2. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

  3. GPU(CUDA)学习日记(十三)------ CUDA内存简介

    GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...

  4. GPU(CUDA)学习日记(九)------ CUDA存储器模型

    GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...

  5. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  6. SpringMVC学习日记 1.Spring框架

    SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...

  7. 微信开发学习日记(一):快速阅读5本书,掌握整体背景

    2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的.       ...

  8. const 指针_C语言学习日记(11)——const与指针

    对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...

  9. 十五的学习日记20160926-你不知道的JS笔记/

    十五的学习日记20160926 JavaScript 一个用于检测正负值的函数,可以用它辨别-0值. 我觉得挺好用,以后可以写到自己的工具库里. //函数:检查传入参数是否为正数.Number=> ...

最新文章

  1. Elasticsearch之插件介绍及安装
  2. [推荐]ORACLE SQL:经典查询练手第三篇(不懂装懂,永世饭桶!)
  3. 原生js设置div隐藏或者显示_10种JS控制DIV的显示隐藏代码
  4. 深度残差收缩网络:(五)实验验证
  5. [linux 日常]修改ls目录的颜色
  6. docker安装消息队列延时插件
  7. jupyter not a color scheme terminal
  8. excel表格导入功能
  9. Bailian2694 逆波兰表达式(POJ NOI0202-1696, POJ NOI0303-1696)【文本】
  10. 2-Twelfth Scrum Meeting20151212
  11. 如何使用虚拟串口软件进行串口调试
  12. 【算法设计与分析】01 算法涉及的研究内容概述
  13. 腐蚀rust电脑分辨率调多少_腐蚀Rust帧数优化指南 游戏FPS提高方法说明
  14. 关于移动硬盘突然变成RAW格式数据该怎么恢复
  15. 增量式旋转编码器的使用,以arduino为例
  16. 羚数智能入选 IDC关于中国制造执行系统(MES)的市场2021年度份额报告
  17. 4 种最安全的 MacBook 电池更换选项
  18. PortSwigger Academy | Authentication : 身份认证
  19. 车联网路侧设施设置指南
  20. JIR、进程池和线程池

热门文章

  1. Unity3D基础28:Invoke计时函数与碰撞销毁
  2. bzoj 1263: [SCOI2006]整数划分
  3. opencv 调整图像亮度和对比度
  4. matlab repmat 函数的使用
  5. python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
  6. jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
  7. using namespace cv
  8. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
  9. VC++实现自定义切换按钮
  10. sql2005数据库备份—sql语句