6

我尝试使用 aur 包在 arch 上安装 opencv。它已成功安装,但是当我尝试在 python 中导入 opencv2 时,出现以下错误

ImportError: libhdf5.so.100: cannot open shared object file: No such file or directory

不仅仅是 python ,即使我尝试使用它运行 c++ 示例代码,我也遇到了同样的错误。我已经尝试在网上搜索,找到了一些遇到类似问题的人,但我仍然无法解决它。

我已经安装了 Open CV 3.2 版

4

3 回答 3

10

有多个名称相似的软件包,但只有一个有效。

如果您尚未安装 OpenCV,请运行:

pacman -S opencv
pacman -S python-opencv

安装hdf5

pacman -S hdf5

请注意,依赖于 OpenCV 的 Sikuli 说明表明/usr/lib. 系统升级可能会破坏链接,必须重新创建链接以指向最新版本的 OpenCV Java 库:

# ls -la /usr/lib/libopencv_java*
-rwxr-xr-x 1 root root 2225952 Jul 18 02:48 /usr/lib/libopencv_java440.so
lrwxrwxrwx 1 root root      20 Aug  5 22:42 /usr/lib/libopencv_java.so -> libopencv_java440.so

这可以使用以下ln命令完成:

sudo su -
cd /usr/lib
rm libopencv_java.so
ln -s libopencv_java440.so libopencv_java.so
于 2017-07-19T10:13:25.533 回答
5

在版本 4 中,在默认配置中,编译opencv 需要hdf5vtk,但是它没有被列为opencv.

这在 archlinux 页面上的两个错误中提到:12

有两种可能的解决方法:

  1. sudo pacman -S hdf5 vtk(占用231.24 MiB内存)
  2. 如果您的程序不需要hdf5and vtk,请删除-lopencv_hdfand -lopencv_viz/usr/lib/pkgconfig/opencv4.pc如果程序使用pkg-config),或者在编译时删除 2 个标志。

警告:如果您使用解决方法 2,更新opencv包将恢复这些更改。您可能希望将它们作为NoUpgrade条目添加pacman.conf(请阅读手册页了解详细信息),但该文件将不再更新,并且其他内容可能会中断。

于 2019-01-31T10:22:52.450 回答
2

对于opencv4

sudo pacman -Sy opencv vtk hdf5

可选地,安装 Qt

sudo pacman -Sy qt5-base qtcreator qt5-doc gdb cmake

在 QtCreator 中创建一个 CMake 项目

粘贴以下内容

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(opencv LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(opencv main.cpp)

find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
target_link_libraries( opencv ${OpenCV_LIBS} )

主文件

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

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}
于 2020-11-18T03:38:04.190 回答