ubuntux学习日记
ubuntu 14.04 下利用apt-get方式安装opencv
- 标签:
- 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的文件都被删除了
- 安装上面这种apt-get install的方式,会使得
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学习日记相关推荐
- java的圆周率_java学习日记,圆周率的打印
前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
- GPU(CUDA)学习日记(十三)------ CUDA内存简介
GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...
- GPU(CUDA)学习日记(九)------ CUDA存储器模型
GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...
- 语言余一个负数_C语言学习日记(8)——整数溢出
小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...
- SpringMVC学习日记 1.Spring框架
SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...
- 微信开发学习日记(一):快速阅读5本书,掌握整体背景
2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的. ...
- const 指针_C语言学习日记(11)——const与指针
对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...
- 十五的学习日记20160926-你不知道的JS笔记/
十五的学习日记20160926 JavaScript 一个用于检测正负值的函数,可以用它辨别-0值. 我觉得挺好用,以后可以写到自己的工具库里. //函数:检查传入参数是否为正数.Number=> ...
最新文章
- Elasticsearch之插件介绍及安装
- [推荐]ORACLE SQL:经典查询练手第三篇(不懂装懂,永世饭桶!)
- 原生js设置div隐藏或者显示_10种JS控制DIV的显示隐藏代码
- 深度残差收缩网络:(五)实验验证
- [linux 日常]修改ls目录的颜色
- docker安装消息队列延时插件
- jupyter not a color scheme terminal
- excel表格导入功能
- Bailian2694 逆波兰表达式(POJ NOI0202-1696, POJ NOI0303-1696)【文本】
- 2-Twelfth Scrum Meeting20151212
- 如何使用虚拟串口软件进行串口调试
- 【算法设计与分析】01 算法涉及的研究内容概述
- 腐蚀rust电脑分辨率调多少_腐蚀Rust帧数优化指南 游戏FPS提高方法说明
- 关于移动硬盘突然变成RAW格式数据该怎么恢复
- 增量式旋转编码器的使用,以arduino为例
- 羚数智能入选 IDC关于中国制造执行系统(MES)的市场2021年度份额报告
- 4 种最安全的 MacBook 电池更换选项
- PortSwigger Academy | Authentication : 身份认证
- 车联网路侧设施设置指南
- JIR、进程池和线程池
热门文章
- Unity3D基础28:Invoke计时函数与碰撞销毁
- bzoj 1263: [SCOI2006]整数划分
- opencv 调整图像亮度和对比度
- matlab repmat 函数的使用
- python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
- jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
- using namespace cv
- 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
- VC++实现自定义切换按钮
- sql2005数据库备份—sql语句