Mac+opencv4+QT5配置问题记录

MacOS下opencv和QT的配置

  • opencv
  • Xcode+opencv
  • QT+opencv

随着Mac版本++,opencv版本++,qt版本++,有些网上的教程配置的环境都无法链接到opencv的库,因此简单的记录一些自己遇到的问题。
这里并不重点讲单独开发环境的安装和配置,主要是记录联动的问题。
本机环境

  • Mac OS:10.15
  • Xcode:11.3
  • opencv:4.1.2
  • QT:5.9.9

opencv

opencv的安装这里说一下两种方法

  • 直接下载源码自己编译安装,具体参考网络或官方文档:https://docs.opencv.org/master/d0/db2/tutorial_macos_install.html
  • 用homebrew安装,在命令行直接homebrew install opencv即可

这里直接用的homebrew安装,截止发文日期2020-7-15日,用homebrew安装的opencv版本为4.1.2
通过homebrew安装的opencv在:/usr/local/Cellar/opencv/4.1.2
直接编译安装的opencv,其include和lib已经直接安装在系统环境下:/usr/local/include和/usr/local/lib

Xcode+opencv

  1. 在Xcode里创建新的命令行程序,也就是Command Line Tool
  2. 如下图所示:在搜索栏里搜索「search」Mac+opencv4+QT5配置问题记录_第1张图片
  3. 将opencv的include的lib加入到项目环境里,如下图所示:Mac+opencv4+QT5配置问题记录_第2张图片
  4. 再把opencv的动态库加入下图所示的依赖库里:Mac+opencv4+QT5配置问题记录_第3张图片
  5. 至此,Xcode+opencv环境配置就结束了。

QT+opencv

各版本的QT安装可以自行搜索,这里就不提了。
老版本的QT和新版本QT在调用opencv时,pro文件的配置差异挺大的。

一直报以下错误。
error: symbol(s) not found for architecture x86_64
error: linker command failed with exit code 1 (use -v to see invocation)

试了很多方法,无果。最后发现还是Pro文件添加opencv链接库的配置问题,参考博客https://blog.csdn.net/a2824256/article/details/103914587的写法,在本机通过编译。

以下是可行的配置方法

//基于本文配置,可行的写法,一次性导入所有库
INCLUDEPATH += /usr/local/Cellar/opencv/4.1.2/include/opencv4
LIBS += /usr/local/Cellar/opencv/4.1.2/lib/libopencv_*

//无法通过的写法
INCLUDEPATH += /usr/local/Cellar/opencv/4.1.2/include/opencv4
LIBS += -L/usr/local/Cellar/opencv/4.1.2/lib \
	-llibopencv_highgui.4.1.2.dylib \
	...

不知道为何不能用-L-l自动包含库目录和库文件,感谢知道的同学留言

上述是一次性包含所有库的写法,如只需个别需要的库,还是可以用类似方法以完整路径的形式单独引入库文件。
例如读取图片并显示只需在配置文件引入以下模块:


INCLUDEPATH += /usr/local/Cellar/opencv/4.1.2/include/opencv4
LIBS += /usr/local/Cellar/opencv/4.1.2/lib/libopencv_core.4.1.2.dylib \
	/usr/local/Cellar/opencv/4.1.2/lib/libopencv_highgui.4.1.2.dylib \
	/usr/local/Cellar/opencv/4.1.2/lib/libopencv_imgcodecs.4.1.2.dylib \

读取图片并显示的代码:

#include 
using namespace cv;

int main()
{
    Mat frame = imread("filename",IMREAD_UNCHANGED);
    imshow("test",frame);
    waitKey(0);
    destroyAllWindows();
}

老版本的开发环境因为升级Xcode导致无法编译或许可以考虑这个回答https://stackoverflow.com/questions/20342896/qt5-1-qt5-2-mac-os-10-9-mavericks-xcode-5-0-2-undefined-symbols-for-archi。

你可能感兴趣的:(opencv,QT,MacOS)