持续创作,加速成长!这是我参与「掘金日新计划 · 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)
输出结果如下:
完美!