OpenCV在Linux上的安装与使用

2023-05-16

1.提前安装依赖

建议按照下述命令进行全安装。实际在安装过程中,系统会跳过那些已经安装过的依赖。

sudo apt-get install build-essential
sudo apt-get install cmake git 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

依赖包包括在编译的时候要用到一些软件,像gcc,cmake;还有一些是下载opencv需要的工具,像Git;还有一些编译opencv所必需的,像ffmpeg 或libav ;还有一些是可选的包等等。可以通过下面几条命令来安装这些依赖包:

2.下载源码包

下载地址:https://github.com/opencv/opencv/releases
下载后解压到/home目录下,解压后的文件名为opencv-3.3.1。

3.开始安装

按照下述命令依次执行安装过程:

  1. 预备阶段
cd ~/opencv-3.3.1
mkdir build	 # 创建工程编译所需文件夹
cd build
  1. 配置
#注意,后面的两个点千万不能省,代表了上级目录
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

上面的CMAKE_BUILD_TYPE =RELEASE指明编译的版本是Release版,CMAKE_INSTALL_PREFIX=/usr/local指明编译后的可执行程序的存放目录。

  1. 编译&&安装
make -j7     # 多线程执行make任务
sudo make install

上面代码中的-j7指7线程同时编译,根据自己CPU的特点调整该参数,如果不了解自己CPU,直接执行make即可。

  1. 查看安装信息
pkg-config --modversion opencv	#查看安装版本

4.验证程序

创建main.cpp文件,加入如下代码:

#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
int main()
{
    Mat srcImage = imread("lena.jpg");
    imshow("源图像",srcImage);
 
    waitKey(0);
 
    return 0;
}

程序所使用的编译命令:

g++ -o main main.cpp `pkg-config opencv --cflags --libs`

上述编译命令中:

–cflags:用来指定程序在编译时所需要头文件所在的目录
–libs:用来指定程序在链接时所需要的动态链接库的目录

在上面的编译命令中我们其实用到了一个工具“pkg-config”,它主要有以下几个功能:
1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2.获得编译预处理参数,如宏定义,头文件的位置。
3.获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
注意:使用之前请确保你安装的OpenCV的安装链接库文件的目录下有一个pkgconfig文件夹,在该文件夹里面有个opencv.pc的文件,其实这就是pkg-config下OpenCV的配置文件。

最后:

./main	#进行验证

若这时你发现有如下的错误提示:

./main: error while loading shared libraries: libopencv_highgui.so.3.3: cannot open shared object file: No such file or directory

这里有两种解决方案:
1.首先在/etc/ld.so.conf.d/处创建文件opencv.conf,并在其中添加上opencv的库目录/usr/local/lib,最后使生效即可。可能使用到的命令如下(永久有效):

sudo vi /etc/ld.so.conf.d/opencv.conf		#创建配置文件,其最终在文件/etc/ld.so.conf内被调用
sudo ldconfig								#使改动生效

opencv.conf文件的全部内容:

#opencv的库路径
/usr/local/lib

2.请执行以下命令,为程序指明库文件的存储位置(重启后失效)。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

而后再次编译、运行,即可成功。

5.如果你想卸载掉OpenCV

make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

6.参考内容

1. OpenCV配置——在Linux中使用OpenCV
2. Ubuntu 16.04 安装opencv的各种方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV在Linux上的安装与使用 的相关文章

  • OpenCV Python RTSP 流

    我想使用 RTSP 从 IP 摄像机流式传输视频 但我有一个问题 我已经安装了先决条件 而且我的 RTSP 链接可以在 VlC 播放器上运行 但是当我在编辑器中尝试并运行它时 它说找不到相机 这是我的代码 import cv2 import
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

    如何叠加两个图像而不损失两个图像的颜色强度 我有图像1和图像2 2 我尝试使用 0 5 alpha 和 beta 但它给我的合并图像的颜色强度只有一半 dst cv2 addWeighted img1 0 5 img2 0 5 0 但是当我
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • Android for OpenCV - 打开跟踪文件时出错,UnsatisfiedLinkError

    我对 Android 开发和 OpenCV 都是新手 我从 Android 下载了 OpenCV 库http sourceforge net projects opencvlibrary files opencv android http
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • Opencv 运动检测与跟踪

    我需要在网络摄像头的视频帧中进行强大的运动检测和跟踪 背景总是一样的 目的是识别物体的位置 如果可能的话没有阴影 但并不急于去除阴影 我已经尝试过用于背景减法和阈值化的opencv算法 但这仅取决于一个图像作为背景 如果背景的亮度 或相机自
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • python openCV 中的人口普查变换

    我开始在一个与立体视觉相关的项目中使用 openCV 和 python 我找到了关于使用 openCV 在 C 中进行人口普查转换的文档页面 link http docs opencv org 3 1 0 d2 d7f namespacec
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 从凸点获取角点

    我编写了算法来提取图像中显示的点 它们形成凸形 我知道它们的顺序 如何从这些点中提取角点 顶部 3 个和底部 3 个 我正在使用opencv 如果你已经有了物体的凸包 并且该包包含角点 那么你需要做的就是简化包直到它只有 6 个点 有很多方
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 如何使用Android opencv使图像的白色部分透明

    我无法链接超过 2 个网址 因此我将我的照片发布到此博客 请在这里查看我的问题 http blog naver com mail1001 220650041897 http blog naver com mail1001 220650041
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐