前言
我之前总结过如何配置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,比之前的方法简单太多了,推荐大家用这个方法。配置的时候注意安装的路径就好。