ubuntu 16.04下安装使用OpenCV2.4.13
本来项目是在Windows下写的,结果对接的时候发现要在Linux下实现,没办法只能重新移植了。以前在ubuntu上使用过OpenCV,可惜系统已经重新安装过,只能重新来一遍了,索性就记录一下安装过程,免得下次再有重新安装的可能。
要用OpenCV,最好的还是用源代码自己编译一下,这样在使用的过程中出现问题的可能性比较小。所以可以的话,就不要直接使用官网下载的已经build好的库来配置。不过在linux下只能下载源代码来自己进行编译了。
Windows下要编译源码的话需要用到cmake这个软件,Linux下同样需要使用这个工具,不过在Linux下就不需要下载什么软件了,直接Terminal就搞定。下面是详细过程。
Step 1:准备工具
// 安装编译工具
sudo apt-get cmake
sudo apt-get build-essential
// 安装依赖包
sudo apt-get libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
// 还有几个可选包也安装一下
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
Step 2:下载编译OpenCV2.4.13
在OpenCV官网下载OpenCV2.4.13的源代码。(因为OpenCV 3.0使用总是有问题,所以我一直用这个版本)
选择下载zip安装包或者tar.gz都是可以的,随便选择其中一个。
下载完成之后打开下载的目录,然后解压安装包:
unzip opencv-2.4.13.zip
这样我们就得到了opencv-2.4.13这样一个文件夹,然后转到这个文件夹目录下进行操作:
cd opencv-2.4.13/
// 新建一个临时文件夹用于存放编译的文件
mkdir release
// 切换到新建的文件夹下
cd release/
// 配置路径,编译
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4 //这是电脑cpu核数,查看一下自己的是几核,改成对应的数字
然后就开始漫长的编译过程了,耐心等待一段时间吧。编译成功大概是下面这个样子的:
[100%] Linking CXX executable ../../bin/opencv_test_gpu
/usr/bin/ld: warning: libpcre.so.1, needed by //home/jianqiang/anaconda2/lib/libgobject-2.0.so.0, not found (try using -rpath or -rpath-link)
[100%] Built target opencv_test_gpu
[100%] Linking CXX shared library ../../lib/cv2.so
[100%] Built target opencv_python
jianqiang@jianqiang-Ubuntu:~/Downloads/opencv-2.4.13/release$
编译完成之后,输入下面的命令安装:
sudo make install
Step 3:后续配置
下面的配置主要是做一些路径上的改动,以便于OpenCV可以被系统找到。
首先用gedit新建一个配置文件,注意这里只能用sudo+gedit的方式新建,因为是在系统文件下进行操作。
sudo gedit /etc/ld.so.conf.d/opencv.conf
这里我们选择了新建一个opencv配置文件的方式,因为这样便于分类管理。然后就在弹出的gedit文本框中添加下面的路径:
/usr/local/lib
点击右上角的保存,然后关闭文件,然后输入下面命令使得配置生效:
sudo ldconfig
继续用gedit打开bash文件:
sudo gedit /etc/bash.bashrc
然后文件拉到最末尾,添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存并关闭文件,接着输入下面的命令,为了使文件生效:
su //获取root权限,否则下面的source命令不可用
注意:如果你是第一次用root用户的话,可能会出现这样的错误:
su: Authentication failure
如果出现这个错误的话,按照下面的方法更新一下密码即可:
sudo passwd root
然后就会提示你输入两次密码,更新成功:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
接着输入:
source /etc/bash.bashrc
如果你的命令界面是这样的,说明是对的:
jianqiang@jianqiang-Ubuntu:~$ su
Password:
root@jianqiang-Ubuntu:/home/jianqiang# source /etc/bash.bashrc
然后按 Ctrl+d 组合键来退出root权限,接着输入下面的命令即可:
sudo updatedb //更新database
Step 4:测试安装是否成功
写了下面一个简单的display.cpp程序:
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv; int main()
{
Mat image = imread("timg_1.jpg", );
if (image.empty())
{
std::cout << "Image file is empty." << std::endl;
return -;
} namedWindow("Test");
imshow("Test", image); waitKey(); return ;
}
然后编译运行:
g++ Dis.cpp -o Dis.o `pkg-config --cflags --libs opencv`
注意上面这段代码后面两个类似引号的符号是你的键盘左上角数字1旁边的那个 ` ,而不是单引号 ' 。
我在生成的时候报了一个错误:
/usr/bin/ld: warning: libpcre.so.1, needed by //home/jianqiang/anaconda2/lib/libgobject-2.0.so.0, not found (try using -rpath or -rpath-link)
这是链接文件出错了,重新链接一下:
cd /usr/lib/x86_64-linux-gnu
sudo ln -s ~/anaconda2/lib/libpcre.so.1 libpcre.so.1
sudo ldconfig
为了方便,我们用makefile的方式来运行这个程序。
在display.cpp所在的文件夹下创建一个CMakeLists.txt文件,打开输入下面的内容:
cmake_minimum_required(VERSION 2.8)
project( Display )
find_package( OpenCV REQUIRED )
add_executable( Display display.cpp )
target_link_libraries( Display ${OpenCV_LIBS} )
然后打开Terminal,输入命令:
cmake . //注意cmake后面是一个空格加一个黑点,这其实是cmake CMakeLists.txt的省略写法
make
./Display timg_1.jpg
如果你的电脑中安装了CUDA,这个时候会出现一个这样的错误:
/usr/bin/ld: cannot find -lopencv_dep_cudart
这个错误就是CUDA引起的,解决方法也很简单,我们在find_package(OpenCV REQUIRED)之前加上:
set(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
再重新输入上面的编译命令就可以成功显示了。
ubuntu 16.04下安装使用OpenCV2.4.13的更多相关文章
- Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格
Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格 sudo add-apt-repository ppa:noobslab/macbuntu sudo a ...
- Ubuntu 16.04下安装64位谷歌Chrome浏览器
1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或 ...
- Ubuntu 16.04下安装谷歌浏览器(转)
1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 2.在终端中,输入以下命令,将下载源加入到系统的源列表. sudo wget http://www ...
- ubuntu 16.04 下安装smplayer视频播放器
安装平台:ubuntu 16.04 1.sudo apt-add-repository ppa:rvm/smplayer 2.sudo apt-get update 3.sudo apt-get in ...
- 在Ubuntu 16.04下安装 virtualbox 5.2
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" ...
- Ubuntu 16.04下安装MySQL5.7
原文链接:https://www.linuxidc.com/Linux/2017-06/144805.htm ps:ubuntu14.04下默认安装的是MySQL5.5 首先执行下面三条命令: sud ...
- Ubuntu 16.04 下安装Firefox的Flash插件
在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...
- Ubuntu 16.04下安装搜狗输入法
在确保更新了国内镜像源的前提下: 安装sogou输入法步骤 一.安装fcitx键盘输入法系统(系统已安装的可忽略此步骤) 1.添加以下源 sudo add-apt-repository ppa:fci ...
- Ubuntu 16.04下安装zsh和oh-my-zsh
注意:安装前先备份/etc/passwd 一开始装oh-my-zsh我是拒绝的,因为这东西安装容易,卸载难,真的很难. Mac安装参考:http://www.cnblogs.com/EasonJim/ ...
随机推荐
- BOM浏览器对象模型下面几个比较实用的方法
location对象 location.href-- 返回或设置当前文档的URL location.search -- 返回URL中的查询字符串部分.例如 http://www.dreamdu.com ...
- file里的路径
实例话file类的对象 File file=new File("d:/mydoc/hello.txt") 文件名:fileMethod.java 相对路径:fileMethod.j ...
- AngularJs学习笔记2-控制器、数据绑定、作用域
上次分享完该系列文章后有朋友也建议说1.x版本除了维护也没有必要学习,可以学习2.0开始学习,我也知道1.x无论是从性能还是架构上都没有2.x好,但是我想因为现在也有一些朋友还在用1.x版本,因为1. ...
- 使用镜像仓库托管自己构建的Docker镜像
自己构建的Docker镜像,默认存储在本机中,Docker有提供某些方式分享这些镜像,但不是主流的镜像分享方式,也有违于开源社区的共享精神. 本文介绍如何使用GitHub托管Dockerfile:使用 ...
- 100+个MySQL调试和优化技巧
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...
- Java编程思想总结笔记Chapter 2
本章介绍Java程序的基本组成部分,体会到Java中几乎一切都是对象. 第二章 一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建 ...
- 企业QQ客服的添加
商城项目需要用腾讯的企业QQ客服,但默认提供的是一个链接,点击后弹出一个新页面, 请确认 确认打开QQ与营销QQ4009928310对话? 点确认才弹出聊天窗口,并不是需求想要的效果,经过一番折腾联系 ...
- NPOI+反射 实现快速导出
只是觉得这样很方便 记录一下 公司有封装的方法,不过是查出的Table类型,每次用的时候很都很烦,处理数据也不方便,最主要的是我也没耐心去看,反正在我看来很麻烦,用的时候很头疼.还是习惯通过Model ...
- Java条件查询涉及到时分秒
关于Oralce数据库 的日期时间查询: 下面我们先来看一组日期数据 表:myDate 列:time; 1998-8-7 23:45:33.3 1998-8-7 11:22:21.5 1998-8-7 ...
- JavaScript垃圾收集-标记清除和引用计数
JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存. 垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地执行这一操作:找出那些 ...