Ubuntu 17.04系统下源码编译安装opencv的步骤详解

Ubuntu 17.04系统下源码编译安装opencv的步骤详解

在Ubuntu 17.04系统中,安装opencv可以通过源或二进制包进行,但由于源和二进制包中的opencv版本较低,不能满足一些开发者的需求。因此,通过源码编译来安装opencv是一个不错的选择。下面将详细介绍源码编译安装opencv的步骤。

步骤

  1. 安装必要的依赖项和工具(推荐使用apt-get安装):

sudo apt-get update
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

  1. 下载opencv源码:

git clone https://github.com/opencv/opencv.git
cd opencv

  1. 创建build目录并进入:

mkdir build
cd build

  1. 运行cmake并编译:

cmake ..
make -j8 //根据电脑CPU核心数来选择-j后面的数字,加快编译速度
sudo make install

  1. 安装完成后,配置opencv库的环境变量:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

  1. 测试opencv是否安装成功:

pkg-config opencv --modversion

如果能够输出opencv的版本号,说明安装成功。

示例

示例1:使用cmake编译

mkdir MyProject           //创建项目目录
cd MyProject              //进入项目目录
vim CMakeLists.txt        //打开CMakeLists.txt文件

然后将以下内容复制到文件中,并保存。

cmake_minimum_required(VERSION 2.8)
project(MyProject)
find_package(OpenCV REQUIRED)
add_executable(myapp main.cpp)
target_link_libraries(myapp ${OpenCV_LIBS})

在项目目录下,创建一个名为main.cpp的文件,并将以下内容复制到文件中,并保存。

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat img = imread("test.jpg");
    imshow("Image", img);
    waitKey();
    return 0;
}

打开终端并进入项目目录,运行以下命令:

mkdir build
cd build
cmake ..
make
./myapp

如果能够正常显示test.jpg的图像内容,说明opencv编译成功。

示例2:使用opencv的CMake模板编译

opencv提供了一个CMake模板,只需要简单的几步就可以编译并运行一个opencv项目。以下是详细的步骤:

在终端中进入opencv的samples/cpp目录:

cd opencv/samples/cpp/

将以下命令复制并粘贴到终端中:

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

执行上述命令后,将会生成一个名为facedetect的可执行文件。使用以下命令来运行该程序:

./facedetect --cascade="path/to/haar_cascade.xml" image.jpg

其中cascade参数是一个已经训练好的haar级联分类器(它用于检测人脸),而image.jpg是一个你希望载入的图像文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Ubuntu 17.04系统下源码编译安装opencv的步骤详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C 程序 二进制转换为十进制

    C程序 二进制转换为十进制使用攻略 1. 程序说明 本程序是用C语言编写的二进制转十进制的代码。它能够将一个二进制数转为与之对应的十进制数。 2. 程序使用 2.1 代码说明 程序主要包含了两个部分:函数定义和函数调用。其中函数定义部分包括二进制转十进制的核心函数binaryToDecimal(),该函数的详细定义和使用说明如下: int binaryToD…

    C 2023年5月9日
    00
  • C++11中的原子量和内存序详解

    C++11中的原子量和内存序详解 什么是原子量? 在多线程编程中,有一个非常重要的概念就是“原子操作”。简单来说,原子操作就是指这个操作一旦开始执行,就不会被其他线程打断,直到完成为止。多个线程同时操作同一个内存地址时,可能会产生竞争,导致数据不一致的问题。当使用原子操作时,可以保证对这个内存地址的操作都是原子级别,不会被打断。 在C++11标准中,增加了一…

    C 2023年5月22日
    00
  • Vue SSR 即时编译技术的实现

    Vue SSR即时编译技术指的是在服务端,即时将Vue组件转换为HTML字符串的技术。下面是详细的实现攻略: 前置条件 首先需要确保你已经熟练掌握了Vue的基础知识,同时也要了解Vue SSR的原理和实现方式,以及Node.js相关的知识。 实现步骤 步骤一:安装依赖 首先,在项目中安装必要依赖: yarn add vue vue-server-render…

    C 2023年5月23日
    00
  • C++中的HTTP协议问题

    C++中的HTTP协议问题 HTTP协议是现代Web应用程序的基础。在C++中正确地使用HTTP协议可以让你构建出更高效、更强大的Web应用程序。下面是一些C++中使用HTTP协议时需要注意的问题: 1. 网络通信 在C++中,网络通信可以使用轻量级的HTTP库来实现。目前有很多这样的库供我们使用,例如libcurl、cpp-netlib等。这些库可以方便地…

    C 2023年5月30日
    00
  • Java使用线程池实现socket编程的方法详解

    Java使用线程池实现socket编程的方法详解 简介 Java中的线程池是用来管理和复用线程的工具。线程池可以减少线程的创建和销毁,节省了系统资源。在socket编程中,线程池可以避免创建大量的线程,优化程序性能。 线程池的实现 线程池的创建可以使用Java中的Executor或ExecutorService接口。这两个类都是Executor框架的一部分,…

    C 2023年5月23日
    00
  • C++智能指针之shared_ptr详解

    C++智能指针之shared_ptr详解 什么是智能指针 智能指针是一种特殊类型的指针,它会自动管理指针所指向的内存,从而避免了因为内存管理不当而导致的内存泄露、多次释放等问题。C++11中提供了三种智能指针:unique_ptr、shared_ptr和weak_ptr。 shared_ptr的介绍 shared_ptr是一种智能指针,它可用于多个指针共享同…

    C 2023年5月23日
    00
  • 基于C语言实现简单学生成绩管理系统

    基于C语言实现简单学生成绩管理系统攻略 1. 设计思路 学生成绩管理系统可以分为以下几个模块: 学生信息模块:包括学生信息的存储、读取和显示功能; 成绩信息模块:包括成绩的录入、修改和查询功能; 统计信息模块:包括成绩排名和平均成绩计算功能。 2. 模块设计与实现 2.1 学生信息模块 学生信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,…

    C 2023年5月23日
    00
  • Redis的数据存储及String类型的实现

    Redis是一款开源的高性能缓存系统,支持多种数据类型的存储,其中String类型是最简单的一种数据类型,并且使用最频繁。本文将从Redis的数据存储及String类型的实现两方面进行详细介绍。 Redis的数据存储 Redis的数据存储采用的是键值对的方式,其中键只能是字符串类型,值则可以是以下五种数据类型之一:String、List、Hash、Set、S…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部