由于已经在Xcode中配置好OpenCV,想起来正好还可以试下直接用Qt来编写OpenCV程序,这样UI的问题到后面就好处理了。
软件环境
操作系统版本:macOS Mojave Version 10.14.6
Qt Creator版本:5.13.0
OpenCV版本:4.1.1
配置步骤
- 参考在macOS上编译使用OpenCV4,先编译出OpenCV的库;
- 新建一个Qt Widgets Application的项目;
- 在项目界面,选择Projects,再选中Run,进入Run Settings界面,将
Add build library search path to DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH
取消勾选;
- 修改
pro
文件,参考如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
INCLUDEPATH += /usr/local/include/opencv4
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_highgui \
-lopencv_imgproc \
-lopencv_imgcodecs
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
主要增加的部分为:
INCLUDEPATH += /usr/local/include/opencv4
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_highgui \
-lopencv_imgproc \
-lopencv_imgcodecs
- 修改```main.cpp``,进行测试,代码如下:
#include "mainwindow.h"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <QApplication>
using namespace cv;
void Demo_draw()
{
Mat img = Mat::zeros(Size(500,500), CV_8UC3);
const int size = 5;
Point points[1][size];
line(img, Point(3, 4), Point(100, 220), Scalar(0, 255, 0), 2, LINE_8);
imshow("draw test", img);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
Demo_draw();
return a.exec();
}
测试运行
运行效果如下:
备注说明
如果不执行步骤中的第3步,则在编译运行时会出现类似如下的错误信息:
16:00:15: Starting /Users/zzz/Documents/GitHub/build-Q-Desktop_Qt_5_13_0_clang_64bit-Release/Q.app/Contents/MacOS/Q ...
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /usr/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
16:00:15: The program has unexpectedly finished.
16:00:15: The process was ended forcefully.
16:00:15: /Users/zzz/Documents/GitHub/build-Q-Desktop_Qt_5_13_0_clang_64bit-Release/Q.app/Contents/MacOS/Q crashed.
网络上的其他方法,如方法一 和 方法二 ,在遇到上述问题是采用了重新链接的方式,都相对麻烦,都不如这个在Qt Creator中的操作简单直接。