ubuntu 14.04 下利用apt-get方式安装opencv
转载,请注明出处:http://blog.csdn.net/tina_ttl
1.前言
相比于源代码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少一些。通过apt方式安装没有自动生成opencv.pc文件,所以在编写makefile文件时不能直接使用pkg-config工具,而需要逐个指定opencv_core、opencv_imgproc等动态链接库!
2.安装方法
- 更新ubtuntu系统软件源
sudo apt-get update
-
安装opencv
sudo apt-get install libcv-dev
-
- 这个安装过程大概需要几分钟,安装完成后得到如下结果
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; }
- 建立名称为Makefile的文件,输入如下内容
CC = g++ # 可执行文件 TARGET = test # C文件 SRCS = test.cpp # 目标文件 OBJS = $(SRCS:.cpp=.o) # 库文件 DLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui # 链接为可执行文件 $(TARGET):$(OBJS) $(CC) -o $@ $^ $(DLIBS) clean: rm -rf $(TARGET) $(OBJS) # 编译规则 $@代表目标文件 $< 代表第一个依赖文件 %.o:%.cpp $(CC) -o $@ -c $<
1
××××××
注意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
- 1
- 2
产生了两个文件:test文件和test.o文件
4.3 测试程序
./test lena.bmp
- 1
- 1
运行结果
上面程序test的作用就是将输入的图像转换为灰度图像,可以看到,程序实现了该功能,也就证明了opencv安装成功
当然,这里的Makefile文件非常重要,具体的使用方式还没明白,有待学习
另外,cmake和make的区别是什么呢?发现大部分都是使用Cmake工具,需要写CMakeLists.txt文件,具体还有待学习
参考文献
[1] 树莓派学习笔记——apt方式安装OpenCV
[2] apt-get下载的文件放在哪个目录
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话