软件型号:
Qt5.7.0
OpenCV3.4.1
CMake3.7.2
1.装好CMake、Qt和OpenCV。
2.此电脑(右键)->属性->高级系统设置->高级->环境变量->系统变量(path)->编辑->新增
D:\Qt\Qt5.7.0\5.7\mingw53_32\bin
D:\Qt\Qt5.7.0\5.7\mingw53_32\lib
D:\Qt\Qt5.7.0\Tools\mingw530_32\bin
D:\Qt\CMake\bin
D:\Qt\opencv-3.4.1\opencv\build\x64\vc14\bin
3.配置C和C++编译器路径
D:/QT/Qt5.7.0/Tools/mingw530_32/bin/gcc.exe
D:/QT/Qt5.7.0/Tools/mingw530_32/bin/g++.exe
5.勾选中“WITH_OPENGL”、“WITH_QT”,然后再次点【Configure】
6.第一次编译后会出现红色,我电脑上安装了Qt5.7.0和Qt5.7.1,但是只有Qt5.7.0才有mingw,所以修改路径红色区域的路径。
修改前:
修改后:
然后不勾选ENABLE_PRECOMPILED_HEADERS
我电脑不是英伟达显卡,所以不勾选WITH_CUDA
勾选ENABLE_CXX11 ,防止后续出问题
7.上步运行完毕后,点【Generate】
1、快捷键:win+R ,输入cmd
输入路径后,输入“mingw32-make”命令,按回车进行编译。
3.当编译完成后,如下图示。然后在当前目标下输入 “mingw32-make install ”,按回车进行安装。这样可用于Qt的opencv库文件就生成了。
4.完成后关闭窗口,即可。
1.显卡不是英伟达的,所以要不勾选WITH_CUDA
2.
解决方法:
由于我的电脑装了Anaconda,所以在cmake进行configure之后会自动检测到python路径并且为其自动build了python的opencv链接,所以取消选中一切关于python的选项。
修改前:
修改后:
3.报错的路径和原因,
大概意思就是在路径D:\Qt\opencv-3.4.1\opencv\sources\modules\videoio\src的cap_dshow.cpp出错了
错误代码提示:error: ‘else’ without a previous ‘if’;error:‘sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA’ was not declared inthis scope
原因:cap_dshow.cpp缺少宏定义
解决方法:打开cap_dshow.cpp文件,在前面加上#define STRSAFE_NO_DEPRECATE
1.把编译后,目标目录下的bin目录路径 添加到Path环境变量中。
D:\Qt\opencvBuild\bin
D:\Qt\opencvBuild\install\x86\mingw\bin
加入变量后,最好重启/注销电脑,否则Qt编程容易崩溃crash,亲测有效
2.新建工程,然后在.pro文件中添加
INCLUDEPATH += D:\Qt\opencv-3.4.1\opencv\build\include\opencv2 \
D:\Qt\opencv-3.4.1\opencv\build\include\opencv \
D:\Qt\opencv-3.4.1\opencv\build\include
LIBS += D:\Qt\opencvBuild\lib\libopencv_*.a
即可
3.部分代码
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;`
void MainWindow::on_openBtn_clicked()
{
//打开原始灰度图
fileName = QFileDialog::getOpenFileName(this,"Open Image",".","Image File(*.png *.jpg *.jpeg *.bmp)");
//grayImg = imread(fileName.toLatin1().data(),IMREAD_GRAYSCALE);
img = imread(fileName.toLatin1().data());
if(img.empty())
return;
//在QLabel中显示图像
QPixmap *pixmap = new QPixmap(fileName);
pixmap->scaled(ui->oriImgLabel->size(), Qt::KeepAspectRatio);
ui->oriImgLabel->setScaledContents(true);
ui->oriImgLabel->setPixmap(*pixmap);
}
感想:在两个电脑上搭建过环境,之前那个搭建了一下午,遇到的是基础问题,这次断断续续搭建了两天,遇到了各种奇葩问题,查阅了好多资料,不过总算成功了,以此纪念,哎。