Mac Xcode Opencv测试报错:Library not loaded,如何解决?

按照csdn帖子安装后跑测试代码一直出不了图,有没有人知道为什么呀

img

当前的一些课程是以Python或C++语言介绍OpenC的使用;C++ 开发工具多是在window下 Visual Studio工具,Xcode的是Mac下很强大的开发工具,本文介绍OpenCV在Xcode下配置、使用。

二、编译过程
1、编译环境配置
需要安装的工具如下,安装过程参考《iOS运行OpenCV4》文章
Xcode
CMake
Python 3.9.6
OpenCV库及额外库的下载

查看所有链接标记安装
brew reinstall pkg-config
2、编译环境
Max min Intel芯片
3 GHz 双核Intel Core i7
macOS Monterey 12.1
Python 3.9.6,
keras 依赖Python的版本:3.6–3.9
tensorflow-2.6.0依赖Python的版本:3.6-3.9
cmake version 3.22.1
GNU Make 3.81
OpenCV主干,版本: 4.5.5,更新时间:2022-03-11

3、创建目录

进入0penCV下载目录,创建及进入build目录

cd ./opencv
mkdir build
cd build

4、项目编译配置
配置项中的:PATH.../opencv_contrib/modules,需要更换为扩展包的目录

配置参数说明
cmake -D CMAKE_BUILD_TYPE=RELEASE 这样产生的makefile文件make生成的可执行文件就带有调试信息,供gdb和gdbserver使用了。
CMAKE_BUILD_TYPE 的值可以为Release或者Debug。
CMAKE_INSTALL_PREFIX=/usr/local ..
INSTALL 指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。 这里就是提前设置好编译到的路径!

5、编译及安装

重新安装时需要清理 make clean

并行运行16个线程,预计编译需要2、3小时

make -j16

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=PATH.../opencv_contrib/modules \
    -D PYTHON3_LIBRARY=`python -c 'import subprocess ; import sys ; s = subprocess.check_output("python-config --configdir", shell=True).decode("utf-8").strip() ; (M, m) = sys.version_info[:2] ; print("{}/libpython{}.{}.dylib".format(s, M, m))'` \
    -D PYTHON3_INCLUDE_DIR=`python -c 'import distutils.sysconfig as s; print(s.get_python_inc())'` \
    -D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D BUILD_EXAMPLES=ON ..

系统安装,没有报错安装成功

sudo make install

6、M1芯片配置编译及安装

项目配置

arch -arm64 cmake
-DCMAKE_SYSTEM_PROCESSOR=arm64
-DCMAKE_OSX_ARCHITECTURES=arm64
-DWITH_OPENJPEG=OFF
-DWITH_IPP=OFF
-D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D OPENCV_EXTRA_MODULES_PATH=/Users/forrest/Documents/forrest/svn/opencv/opencv_contrib/modules
-D PYTHON3_LIBRARY=python -c 'import subprocess ; import sys ; s = subprocess.check_output("python-config --configdir", shell=True).decode("utf-8").strip() ; (M, m) = sys.version_info[:2] ; print("{}/libpython{}.{}.dylib".format(s, M, m))'
-D PYTHON3_INCLUDE_DIR=python -c 'import distutils.sysconfig as s; print(s.get_python_inc())'
-D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python
-D BUILD_opencv_python2=OFF
-D BUILD_opencv_python3=ON
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=OFF
-D OPENCV_ENABLE_NONFREE=ON
-D BUILD_ZLIB=OFF
-D BUILD_EXAMPLES=ON ..

编译,大概5、6分钟

arch -arm64 make -j8

安装

arch -arm64 sudo make install
编译错误:modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all Error 2

四、项目运行
1、创建项目
MacOpenCV 项目
打开Xcode,建立一个macOS平台的终端项目。 New Project -> macOS -> Command Line Tool
项目名称,例如:MacOpenCV, 语言选择:C++, 如下图:

2、项目配置
选择 .xcodeproj 文件,然后在 build Settings 中,搜索 “Search Path”,分别设置下面两项:
Header Search Paths: 这是头文件的路径 /usr/local/include/opencv4
Library Search Paths:这是库文件的路径 /usr/local/lib

接下来设置 Other Linker Flags,具体内容可使用pkg-config来查看。使用 pkg-config --cflags --libs opencv 可以查看所有链接标记。
报错参考:Package opencv was not found in the pkg-config search path.
新建文件: /usr/local/lib/pkgconfig/opencv.pc
内容:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version:4.5.5
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
然后将文件导入到环境变量:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

pkg-config --cflags --libs opencv
-I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
当前添加:最好把其他的都添加上避免报错后再添加
-lopencv_core
-lopencv_highgui
-lopencv_imgcodecs

3、测试代码
运行参考添加图片目录:$(SRCROOT)/MacOpenCV/rising_sun.jpg

项目代码:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>#include <iostream>using namespace cv;
​
int main(int argc, const char * argv[]) {
    std::cout << "Hello, World!\n";
    
    // 通过运行参数获取图片路径
    std::string filePath(argv[1]);
    std::cout << "Image path:" << filePath << std::endl;
    
    std::string image_path = samples::findFile(filePath);
    Mat img = imread(image_path, IMREAD_COLOR);
    if(img.empty()) {
        std::cout << "Could not read the image: " << image_path << std::endl;
        return 1;
    }
    
    imshow("Display window", img);
    waitKey(0); // Wait for a keystroke in the window
    
    return 0;
}

运行效果:

五、参考资料
opencv/opencv: Open Source Computer Vision Library (github.com)
MacOS Catalina编译安装openCV 4.2.0
mac上安装编译opencv4.3.0及opencv-contrib-4.3.0
Mac上OpenCV的安装与运行
Mac Xcode opencv C++环境配置
How to develop an OpenCV C++ algorithm in Xcode | by Anurag Ajwani | Medium
Mac M1 安装配置opencv详细教程 - 简书 (jianshu.com)


引用chatGPT作答,这个错误通常发生在您正在使用 Xcode 编译和运行 OpenCV 库时,这时候系统提示说找不到相关的库文件。以下是一些可能的解决方案:

1.确保您已正确安装 OpenCV 库。如果您没有安装 OpenCV 库,请先下载并按照官方文档进行安装。

2.检查您的 Xcode 项目设置。确保您已正确配置了 OpenCV 库的路径。具体来说,在项目设置中,打开“Build Settings”选项卡,搜索“Header Search Paths”和“Library Search Paths”,并确保这些路径包含了 OpenCV 库的路径。

3.检查您的环境变量。确保您已将 OpenCV 库的路径添加到了 LD_LIBRARY_PATH 环境变量中。您可以通过终端输入以下命令来查看当前环境变量:

echo $LD_LIBRARY_PATH

如果输出为空,则需要将 OpenCV 库的路径添加到环境变量中。您可以在终端中输入以下命令:

export LD_LIBRARY_PATH=/path/to/opencv/lib:$LD_LIBRARY_PATH

将 /path/to/opencv/lib 替换为您实际的 OpenCV 库的路径。

4.如果您使用的是 Xcode 10 或更高版本,请尝试在“Build Phases”选项卡中添加“Copy Files”构建阶段,并将“Destination”设置为“Frameworks”。然后将 OpenCV 库添加到“Copy Files”构建阶段中。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个问题可能是由于 Xcode 无法正确加载 OpenCV 库文件所引起的。可能的解决方法有:

  1. 设置 Xcode Build Settings
    在 Xcode 中,打开 Build Settings,找到"Search Paths"下的"Library Search Paths"并添加以下路径:
    /usr/local/lib

  2. 安装 OpenCV
    确保您已正确安装了 OpenCV。您可以使用 Homebrew 进行安装,使用以下命令:

brew install opencv
  1. 配置环境变量
    在终端中使用以下命令来将 OpenCV 库文件添加到环境变量中:
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH

为了使这些更改永久生效,可以将它们添加到 .bash_profile 文件中。

  1. 检查编译选项
    在编译选项中检查您是否正确链接了 OpenCV 库文件。如果您使用 CMake 构建项目,请确保已正确设置 FIND_PACKAGE(OpenCV REQUIRED) 和 TARGET_LINK_LIBRARIES(your_project ${OpenCV_LIBS}) 。

  2. 检查 OpenCV 版本
    请确保您的测试代码与您安装的 OpenCV 版本相匹配。如果您使用的是 OpenCV 4.x 版本,您可能需要使用新的 API 调用。

以下是使用 OpenCV 进行图像读取和显示的 Python 代码示例:

import cv2

img = cv2.imread('test.jpg')
cv2.imshow('Image', img)
cv2.waitKey(0)

希望以上解决方法能够帮助到你。
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    根据参考资料中提供的Xcode项目配置方法,应该按照以下步骤来解决问题:

    1. 找到Xcode工程的“Search Paths”选项,添加相关目录:

    2. Header Search Paths —— 添加 “/usr/local/include/opencv4”

    3. Library Search Paths —— 添加"/usr/local/lib"和"/usr/local/Cellar/opencv/4.1.0_2/lib"

    4. 右键工程新建一个文件夹(Group),将“/usr/local/Cellar/opencv/4.1.0_2/lib”文件夹中的"*.dylib"文件拖拽进去。

    具体来说,可以按照以下步骤操作:

    1. 打开你的Xcode项目,找到项目文件夹下的.xcodeproj文件,打开该文件,进入Xcode的界面。
    2. 创建一个Command Line Tool 项目,选择C++或者Objective-C++作为语言。
    3. 在Xcode中的“Build Settings”中找到“Search Paths”选项。
    4. 在“Header Search Paths”下,添加路径“/usr/local/include/opencv4”,确保Xcode可以找到OpenCV库的头文件。
    5. 在“Library Search Paths”下,添加路径“/usr/local/lib”和“/usr/local/Cellar/opencv/4.1.0_2/lib”,确保Xcode可以找到OpenCV库的动态链接库文件。
    6. 右键工程新建一个文件夹(Group),命名为“opencv_libs”,用来存放OpenCV库文件。
    7. 打开Finder,前往路径“/usr/local/Cellar/opencv/4.1.0_2/lib”(根据你安装的版本号会略有不同),将该路径下的所有.dylib文件拖拽到刚才新建的“opencv_libs”文件夹中,确保Xcode可以找到OpenCV库文件。
    8. 运行你的代码,如果还是有问题,可以尝试重新编译你的项目或者重启Xcode。

    以上步骤经常可以解决大多数Mac Xcode中使用OpenCV出现的Library not loaded报错。如果还是有问题,可能需要针对具体的错误信息进行更进一步的排查和修复,提供更多的信息如具体错误信息可以协助更精确的解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^