OpenCV学习笔记:开发环境安装

167 阅读2分钟

image-20210607214122147

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

本文是我之前在微信公众号上的一篇文章记录。原链接为:# OpenCV学习笔记:Ubuntu安装

安装依赖:

OpenCV 4.0的使用会需要很多的依赖项,例如图片编码库、视频编码库等。我们把可能用到的依赖都安装上,以防后面编译出错。“build-essential”是Linux系统中常用的编译工具,包括g++,安装了该软件包,编译c/c++所需要的软件包也都会被安装。

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

官方安装说明: docs.opencv.org/4.5.2/d7/d9…

下载源码包:

去官网下载源码包:opencv-4.5.2.zip

下载完进行解压:unzip opencv-4.5.2.zip

编译

camke设置编译环境:

cd opencv-4.5.2
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.2 .. 

-D OPENCV_GENERATE_PKGCONFIG=YES: OpenCV4以上版本默认不使用pkg-config,该编译选项开启生成opencv4.pc文件,支持pkg-config功能。

-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.2:指定安装目录。

真正的编译:

sudo make -j8 

安装

编译结束后进行安装:

sudo make install

设置添加OpenCV动态库信息

安装OpenCV 4.1之后还需要通过配置环境告诉系统安装的OpenCV 4.1在哪里,配置OpenCV动态库环境——程序执行时加载动态库*.so的路径:

touch opencv-4.5.2.conf
echo "/usr/local/opencv-4.5.2/lib" > opencv-4.5.2.conf
sudo mv opencv-4.5.2.conf /etc/ld.so.conf.d/

sudo ldconfig 
sudo apt-get update

配置bash

sudo vim /etc/profile

在末尾添加

export PKG_CONFIG_PATH=/usr/local/opencv-4.5.2/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv4.5.2/lib

更新一下

source /etc/profile
sudo updatedb

验证

codemaxi@pc:~$ pkg-config --modversion opencv4
4.5.2
codemaxi@pc:~$ 

代码验证:

#include <iostream>
#include "opencv2/opencv.hpp"

int main()
{
    std::string img_path = "/home/codemaxi/Downloads/mn.jpeg";

    cv::Mat img = cv::imread(img_path, cv::IMREAD_COLOR);

    cv::Mat resize_img;
    cv::resize(img, resize_img, cv::Size(405, 600));

    cv::imshow("mm", resize_img);

    cv::waitKey(0);

    return 0;
}

编译Makefile:

CXX ?= g++
 
CXXFLAGS += -c -std=c++17 -Wall $(shell pkg-config --cflags opencv4)
LDFLAGS += $(shell pkg-config --libs --static opencv4)

target := opencv
cppfile := opencv_test1

all: $(target)

$(target): $(cppfile).o; $(CXX) $< -o $@ $(LDFLAGS)

%.o: %.cpp; $(CXX) $< -o $@ $(CXXFLAGS)

clean: ; rm -f $(cppfile).o $(target)

输出结果如下:

image-20210607213828107

完美!