几周以来,我一直在尝试在 ubuntu 上安装 opencv4.0.1。我遵循了opencv安装说明 并且我能够制作和编译该库,但安装后,pkgconfig 仍然找不到该库,并且当我尝试构建程序时,出现缺少库错误等情况。
$ pkg-config --cflags opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
答案1
根据这个问题,OpenCV 放弃了对 pkg-config 的支持。但是,可以按如下方式添加:
配置
运行时cmake
添加附加参数-D OPENCV_GENERATE_PKGCONFIG=YES
,例如
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local ..
然后make
就和sudo make install
以前一样。
测试
使用名称opencv4
而不是仅仅opencv
例如
pkg-config --cflags opencv4
答案2
概括:
此方法手动下载、提取、编译和安装最新的 OpenCV 4.0.1。main.cpp
还提供了一个工作示例代码,以证明 OpenCV 安装成功。
什么是 OpenCV?
OpenCV 是一个由英特尔创建的图像处理库,后来由 Willow Garage 支持,现在由 Itseez, Inc. 维护。OpenCV 表示英特尔® 开源计算机视觉库。它是 C 函数和一些 C++ 类的集合,可实现一些流行的图像处理和计算机视觉算法。OpenCV 可在 Mac、Windows、Linux(终端环境)上使用。
按照以下步骤安装 OpenCV:
更新 Ubuntu 18.04。
发出以下命令:
$ sudo apt-get update $ sudo apt-get upgrade
安装依赖项。
发出以下命令:
$ sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config\ libavcodec-dev libavformat-dev libswscale-dev python3.7 python3.7-dev python-numpy\ python-scipy python-matplotlib ipython python-pandas python-sympy python-nose\ libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libjasper-dev\ libdc1394-22-dev libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev\ libx264-dev sphinx-common libtbb-dev yasm libfaac-dev libopencore-amrnb-dev\ libopencore-amrwb-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libavutil-dev\ libavfilter-dev libavresample-dev
获取 OpenCV:从以下网址下载 opencv 4.0.1OpenCV 版本和 opencv 4.0.1 测试数据opencv_extra-master.zip。
提取 OpenCV 4.0.1 zip 包
现在你已经下载了适合你系统的正确归档包到~/下载文件夹中,运行以下命令来提取 OpenCV。
$ sudo mkdir /opt/opencv
要将 zip 文件解压到文件夹
opencv-4.0.1.zip
中/opt/opencv
,请运行以下命令:$ sudo unzip ~/Downloads/opencv-4.0.1.zip -d /opt/opencv
现在提取
opencv_extra-master.zip
一个大小为 490.3 MB 的大文件,其中包含测试所需的测试套件opencv 4.0.1
。运行以下命令完成提取:$ sudo unzip ~/Downloads/opencv_extra-master.zip -d /opt/opencv/opencv-4.0.1
设置
symlink latest
指向当前版本 opencv-4.0.1发出以下命令来创建
symlink
:$ cd /opt/opencv $ sudo ln -s opencv-4.0.1 latest
为什么需要最新的符号链接?
Symlink latest
始终跟踪 OpenCV 安装的当前版本。假设明天有新版本 5.0.1 推出,那么就安装该版本。现在,
symlink latest
通过发出以下命令删除指向旧版本 4.0.1 的链接:$ sudo unlink /opt/opencv/latest
“Symlink latest” 指向当前版本 opencv-4.0.1,但最新版本 5.0.1 的到来导致“symlink latest”与版本 4.0.1 断开。
现在
symlink latest
使用以下命令创建指向较新版本 5.0.1:$ sudo ln -s opencv-5.0.1 latest
现在 'symlink latest' 指向较新的版本 opencv-5.0.1。请注意,没有名为 5.0.1 的版本,这只是一个“虚构”的版本,用于展示 'symlink latest' 的强大功能。
同时,您仍可以保留旧版本而不删除它们。出于某些原因,您想使用旧版本,只需切换
symlink latest
指向该旧版本即可!您无需更改任何其他设置。在步骤8随后,您将设置
PATH, LD_LIBRARY_PATH, PKG_CONFIG_PATH, and OPENCV_TEST_DATA_PATH
环境变量。所有这些环境变量的值都涉及symlink latest
,因此即使您稍后切换到较新的版本,这些设置也始终保持不变!
安装
OpenCV 4.0.1
zip 包创建一个临时的构建目录
release
,我们将其表示为<cmake_build_dir>
,您需要将生成的 Makefile、项目文件以及目标文件和输出二进制文件放在其中,然后进入那里。$ cd /opt/opencv/latest $ sudo mkdir release
要构建和安装 OpenCV,请发出以下命令:
$ cd /opt/opencv/latest/release $ sudo cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=YES -DCMAKE_INSTALL_PREFIX=/opt/opencv/opencv-4.0.1 /opt/opencv/opencv-4.0.1
笔记:
- 运行 cmake 时添加此标志:
-D OPENCV_GENERATE_PKGCONFIG=YES
- 将生成
.pc
文件pkg-config
并安装它。 - 如果不
cmake
使用的项目很有用OpenCV
。
从构建目录
release
执行make
,建议在多个线程中执行此操作:$ cd /opt/opencv/latest/release $ sudo make -j4 # runs 4 jobs in parallel $ sudo make install
要更新
links/cache
动态加载器使用的:$ sudo ldconfig
- 运行 cmake 时添加此标志:
在本地运行 opencv-4.0.1 的测试套件
在开始测试用例之前,
OPENCV_TEST_DATA_PATH
必须设置环境变量。$ export OPENCV_TEST_DATA_PATH=/opt/opencv/latest/opencv_extra-master/testdata
发出以下命令来开始所有测试用例:
$ cd /opt/opencv/latest/release $ sudo ./bin/opencv_test_core
测试用例为什么会
Core_globbing.accuracy
失败?"./bin/opencv_test_core"
我们刚刚构建了我们的 OpenCV 源并尝试通过从文件夹运行来测试编译"/opt/opencv/latest/release"
。该测试用例失败,因为没有输入图像,因此拍摄任意
.jpg
和.png
图片并将这两张图片重命名为和lena.jpg
,lena.png
然后将它们复制到"/opt/opencv/latest/release/bin"
文件夹中,然后再次重新运行所有测试用例。发出以下命令再次重新运行所有测试用例:
$ cd /opt/opencv/latest/release $ sudo ./bin/opencv_test_core
设置 PATH 环境变量
OpenCV需要设置
PATH
环境变量,设置方式如下。opencv.sh
在目录下创建一个名为的文件/etc/profile.d/
。$ sudo touch /etc/profile.d/opencv.sh $ sudo vi /etc/profile.d/opencv.sh
添加以下内容:
#!/bin/sh export PATH=/opt/opencv/latest/bin:/opt/opencv/latest/release/bin:${PATH} export LD_LIBRARY_PATH=/opt/opencv/latest/release/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=/opt/opencv/latest/lib/pkgconfig export OPENCV_TEST_DATA_PATH=/opt/opencv/latest/opencv_extra-master/testdata
保存并关闭文件。使用以下命令使其可执行。
$ sudo chmod +x /etc/profile.d/opencv.sh
然后,通过运行以下命令永久设置环境变量:
$ source /etc/profile.d/opencv.sh
注销或重新启动系统。
现在,检查
PATH
环境变量:$ echo $PATH
PATH
环境变量应该有/opt/opencv/latest/bin
目录和/opt/opencv/latest/release/bin
目录。opencv4.pc 在哪里?
发出以下命令来定位
opencv4.pc
:$ sudo find /opt -name opencv4.pc
opencv4.pc 将在/opt/opencv/latest/lib/pkgconfig目录。
现在,使用命令检查python3.7版本:
$ python3.7 version
二进制位于哪里
opencv_version
?opencv_version
现在,使用以下命令检查位置:$ sudo updatedb # rebuild library cache $ locate opencv_version | grep bin/opecv_version
opencv_version 位于/opt/opencv/latest/release/bin目录。
现在,检查
opencv_version
使用命令:$ opencv_version
现在要检查是否
OpenCV
安装在机器上,请运行以下命令:$ pkg-config --modversion opencv4
样品测试:
- 创建文件夹
~/code
目录。 - 保存以下程序为
main.cpp
- 移入目录
main.cpp
~/code
sample.jpg
将小于 1 MB 的大小添加到~/code
目录中进行测试。
发出以下命令:
$ cd ~/code $ ls
示例代码:
#include <opencv2/highgui.hpp> #include <iostream> int main( int argc, char** argv ) { cv::Mat image; image = cv::imread("sample.jpg" , cv::IMREAD_COLOR); if (! image.data ) { std::cout << "Could not open or find the image :"; std::cout << "sample.jpg" << std::endl ; return -1; } cv::namedWindow( "Display window", cv::WINDOW_AUTOSIZE ); cv::imshow( "Display window", image ); cv::waitKey(0); return 0; }
编译
main.cpp
$ cd ~/code $ g++ main.cpp -o output `pkg-config --cflags --libs opencv4`
运行
./output
如下:$ ./output
示例程序的输出
main.cpp
:- 创建文件夹
答案3
构建库之后,您需要安装它以便在无需指定构建目录的情况下找到它。
sudo make install
这也许能解决你的问题。
答案4
我通过运行sudo find / -name "opencv4.pc" 2>/dev/null
位于/usr/lib/x86_64-linux-gnu/pkgconfig/opencv4.pc