Qt5.9.1配置OpenCV3.4错误及解决办法(mingw32)

在用cmake编译opencv3.4.1出现了不少错误,用的编译器是mingw,报过几种错误,现将其整理如下:

配置Qt与opencv可以参考官方文档: qt with opencv. 

1. 官方文档中提到的取消勾选ENABLE_PRECOMPILED_HEADERS和报错信息:

'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ,在 #include "DShow.h" 之前添加#define NO_DSHOW_STRSAFE;

2.网上提到的error: base class 'struct IUnknown' has accessible non-virtual destructor [-Werror=non-virtual-dtor]

到sources目录下搜索OpenCVCompilerOptions.cmake,将里面的add_extra_compiler_option(-Werror=non-virtual-dtor注释掉

如果你尝试了各种方法均无果,那么请直接从这开始:

在编译二进制文件的路径下进行mingw32-make报错,采用的解决办法是,直接下载opencv3.4的sources压缩包,之前都是下载opencv-3.4.0-vc14_vc15这种格式的可执行文件进行提取,vc编译器和mingw32还是有一定的差异的,尝试各种解决办法都是到42%,48%,72%报错失败,直接在cmake中填上sources解压好的文件路径,以及一个build-opencv路径,和官网提示的类似,记住该路径即可,至于编译器选择gcc和g++前面的官方文档已详细介绍,值得注意的是这样编译还是会在48%左右报错,但解决办法就是官网提供的两个,将ENABLE_PRECOMPILED_HEADERS取消勾选以及在cap_dshow.cpp中添加#define NO_DSHOW_STRSAFE即可,这次就顺利到了97%...,报错的内容是python部分,由于个人opencv for python是直接用pip安装的,所以这里就没有再去配置opencv for python,报错的信息是error: '::hypot' has not been declared using ::hypot,这个的解决办法是在cv2.cpp中#include 之前加上#include

                                            Qt5.9.1配置OpenCV3.4错误及解决办法(mingw32)_第1张图片

这样做完之后进行后续的ming32-make install等创建一个显示图片的示例,发现在#include 找不到路径,回去查看sources解压路径下的include文件夹中opencv和opencv2内的头文件只有两三个,解决办法,下载3.4的可执行文件提取里面的include文件夹中的opencv和opencv2(真香)到方才只有两三个头文件的include文件夹中,复制-覆盖-完成,编译执行均通过。

总结

opencv c++配置各种问题很常见,尤其是对mingw编译器,如果你也遇到这些问题,多点耐心,尝试多种解决办法,为了解决这问题,试过了4次下载opencv,还有网上报错各种各样,还是建议你如果用mingw还是不要直接下载opencv的可执行文件提取,直接下载sources压缩包进行编译,出错率极大降低,还有就是新版本慎用,早一个版本,一来网上资源要多一些,二来你不知道会不会出现你是首批遇到这些问题的人。

你可能感兴趣的:(计算机视觉)