正确完整配置过程可直接参照[4],如途中有报错,可参考是否遇到以下问题并解决。
本来是按照[1]来配置的,但是当初在装Qt时只装了MinGW没装MSVC,所以按照[5]来添加组件:
在经过漫长的等待之后,发现添加列表里依然没有想要的组件,于是只好卸载重装。
重装完后,按照[1]的操作,在.pro中添加:
INCLUDEPATH += $$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/include)
CONFIG(debug, debug|release): {
LIBS += -L$$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/x64/vc15/lib) \
-lopencv_core411d \
-lopencv_imgproc411d \
-lopencv_highgui411d \
-lopencv_ml411d \
-lopencv_video411d \
-lopencv_features2d411d \
-lopencv_calib3d411d \
-lopencv_objdetect411d \
-lopencv_contrib411d \
-lopencv_legacy411d \
-lopencv_flann411d
} else:CONFIG(release, debug|release): {
LIBS += -L$$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/x64/vc15/lib) \
-lopencv_core411 \
-lopencv_imgproc411 \
-lopencv_highgui411 \
-lopencv_ml411 \
-lopencv_video411 \
-lopencv_features2d411 \
-lopencv_calib3d411 \
-lopencv_objdetect411 \
-lopencv_contrib411 \
-lopencv_legacy411 \
-lopencv_flann411
}
其中 $$quote() 是因为路径有空格,411是因为opencv是4.1.1版本。
然后出现了[3]的问题,在 main.cpp 中添加头文件得到解决:
#include <opencv2/highgui/highgui_c.h>
接下来又出错,-lopencv_core411d \ 找不到啊之类的,无法解决。
然后尝试了[2]的方法,在cmake的时候,出现了下面的错误:
用 Direct修复工具 修复,dll文件没有问题,但是c++ 2015更新失败:
之后在opencv的安装目录下发现是有libwinpthread.dll的,把它复制到了 C:\Windows\System32 ,依然有错误。
最后重启了电脑,结果直接QQ和Qt都无法启动了:
再次运行 Direct修复工具,还是没有解决,依然有上述问题。
在贴吧[6]找到了方法,先把c++2015卸载:
然后再运行 Direct修复工具,虽然依然没有成功更新,但是QQ和Qt都能打开了,执行qmake也没有报错。
思考了一下,觉得[1]是opencv2.x.x,[2]是opencv3.x.x,而我是4.1.1,于是查看了[4]。
没有按照[4]写的去执行cmake了,因为我的opencv下其实有build文件夹,而且Windows SDK好像原本也是已经安装了的。之前安装的VS是VS2015版的。
于是在Qt创建新的项目,在创建页面只勾选MSVC2015那一项,在.pro文件最后添加如下代码:
INCLUDEPATH += $$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/include)
CONFIG(debug, debug|release): {
LIBS += -L$$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/x64/vc15/lib) \
opencv_world411d.lib
} else:CONFIG(release, debug|release): {
LIBS += -L$$quote(D:/program files/ProFile/DeepLearning/opencv/opencv/build/x64/vc15/lib) \
opencv_world411.lib
}
在 main.cpp 中添加下述代码:
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat image = imread("C:/Users/lakuite/Desktop/test.png");
imshow("window",image);
}
即下图所示:
[4]中所说的编译器实际上没有修改,直接右键该项目构建qmake,然后编译运行,显示出了图像。
虽然可能是图像本身的原因,和用python的cv2显示的一样,显示框都非常大而且是个局部图。
根据[7],在 imshow("window", image); 前加 namedWindow("window", 0); 得到解决:
或者直接imwrite(save_path, image); 直接保存下来。