Mac M1 + Qt + OpenCV 配置安装详细教程以及遇到的一些问题


前言

我之前总结过如何配置opencv,点Mac M1安装配置OpenCV教程,但是流程实在是太过复杂,要我重新配置一遍我可能都记不住,所以在此推荐一个更简单的方法,因为opencv版本的不同,会遇到一些问题,在此也一并解决了。


一、安装HomeBrew

1、先检查一下有没有安装homebrew
命令如下:

brew -v

如果弹出版本号,就证明安装过了,直接跳到“二、安装cmake”。
在这里插入图片描述
如果是下面这样,就没有安装过,接着往下看。
在这里插入图片描述
安装指令:

$ /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

卸载指令:

$ /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/uninstall.sh)"

更多请查看Mac Homebrew 安装与卸载

二、安装cmake

指令如下:

brew install cmake

安装完成以后,执行指令

brew info cmake

如果出现下面的界面则安装成功
在这里插入图片描述

三、安装opencv

brew install opencv

安装完成以后,执行指令

brew info opencv

如果出现下面的界面则安装成功
在这里插入图片描述
注意:
在M1上用homebrew安装opencv的路径是:
/opt/homebrew/Cellar/opencv/4.5.5_2
不是其他教程显示的/usr/local/opencv,这个要注意。后面要用到的库文件和头文件都在这里。

四、demo测试(Qt + OpenCV)

1、创建Qt一个项目
在这里插入图片描述
2、添加测试代码,
源码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "opencv2/opencv.hpp"
using namespace cv;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Mat image;
    // 此图片是我放在桌面的一张图片,改为你想显示的图片的路径
    image = imread("/Users/用户名/Desktop/205056-165443345607ac.jpg", IMREAD_UNCHANGED);
    namedWindow("Image", WINDOW_AUTOSIZE);
    //    InputArray mat
    imshow("Image", image);
}

MainWindow::~MainWindow()
{
    delete ui;
}

如图
在这里插入图片描述

3、在pro文件中引入头文件和库,
代码:

INCLUDEPATH += /opt/homebrew/Cellar/opencv/4.5.5_2/include/opencv4/opencv2/
INCLUDEPATH += /opt/homebrew/Cellar/opencv/4.5.5_2/include/
INCLUDEPATH += /opt/homebrew/Cellar/opencv/4.5.5_2/include/opencv4/
// 安装的路径是/opt/homebrew/Cellar/opencv/4.5.5_2,
// 库文件也在这个目录下,不要用其他什么usr/local/lib路径,那是有问题的
LIBS += /opt/homebrew/Cellar/opencv/4.5.5_2/lib/libopencv_*

如图
在这里插入图片描述

4、点击构建,然后运行,弹出如下类似的界面就是配置成功了。
在这里插入图片描述

五、Qt调用OpenCV遇到的问题

细心的朋友可能发现了,我在上面的截图中有两个错误,分别是
1、In included file: ‘arm_neon.h’ file not found with include; use “quotes” instead

2、No viable conversion from ‘cv::Mat’ to ‘const cv::_InputArray’
虽然不影响程序运行,但是看着不舒服。

下面来解决这两个问题:
1、In included file: ‘arm_neon.h’ file not found with include; use “quotes” instead
问题描述:提示是缺少arm_neon.h头文件。
原因:在macOS上,ARM Mac、iOS或ARM Android上,并引用或者间接引用包含“qsimd.h”的Qt头文件时,Clangd提示没有找到“arm_neon.h”。更多见
“‘arm_neon.h’ file not found”
解决方法:这个“arm_neon.h”是Xcode中的文件,如果你的Mac安装了Xcode的话,从包中拷贝出来放到引用的地方就可以了,两者的详细路径如下:
“arm_neon.h”所在路径:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/arm_neon.h
在访达中shift + command + g 跳转到该文件夹拷贝
路径根据版本不同可能存在差异

Contents打开方式是鼠标右键“显示包内容”,如图
在这里插入图片描述

拷贝到:

/Applications/Creator.app/Contents/Resources/libexec/clang/lib/clang/14.0.0/include
你的Qt可能不在Applications路径下,找到你自己的Qt路径

2、No viable conversion from ‘cv::Mat’ to ‘const cv::_InputArray’
问题描述:提示无法将cv::Mat转换成const cv::_InputArray。
原因:推测原因应该是opencv版本的问题,可能与“初始化”: 无法从“const cv::Mat”转换为“IplImage”,OpenCV4.3.0类似(没有经过验证)。
解决方法:强制转换。
将原始的代码改为:

//imshow("Image", image);
imshow("Image", cv::InputArray(image));

将程序清除,然后重新构建,这个两个问题就会消失了。


总结

这个方法使用homebrew安装opencv,比之前的方法简单太多了,推荐大家用这个方法。配置的时候注意安装的路径就好。

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值