opencv与contrib4.2.0环境搭建

环境 Windows10/Windows11

1.安装QT

下载地址:Index of /archive/qt

推荐下载5.14.1

这里拿5.14.0做示例

如果不想注册可以打开程序之前把网关掉

        

 2.安装CMake

下载地址:Download | CMake

 

3.安装Python

下载地址:python.org/downloads/windows/

 4.下载OpenCV

下载地址:https://github.com/opencv/opencv/releases/tag/4.2.0

                  Release 4.2.0 · opencv/opencv_contrib · GitHub

 

 5.添加环境变量

 

 

 

 

6.编译前准备

1.准备目录

1)在D:盘根目录下新建OpenCV_4.2.0-Source文件夹,将下载得到的OpenCV库的opencv-4.2.0.zip包解压,将得到的所有文件复制到该文件夹。

2)在D:盘根目录下新建Contrib_4.2.0-Source文件夹,将下载得到的Contrib扩展库的opencv_contrib-4.2.0.zip包解压,将得到的所有文件复制到该文件夹。

3)在D:盘根目录下再新建一个OpenCV_4.2.0-Build文件夹,用于存放编译后生成的文件和库。

 2.改动源文件

 1.改动OpenCV_4.2.0-Source\modules\videoio\src\cap_dshow.cpp

 增加宏定义“#define STRSAFE_NO_DEPRECATE

2.改动OpenCV_4.2.0-Source\modules\photo\test\test_hdr.cpp

增加头文件包含“#include <ctime>”和“#include <cstdlib>

 

7.编译配置

打开CMake(cmake-gui)

设置好路径后,单击左下角的“Configure”按钮

 选择C编译程序的路径为D:\Qt\Qt5.14.1\Tools\mingw730_32\bin\ gcc.exe

 选择C++编译程序的路径为D:\Qt\Qt5.14.1\Tools\mingw730_32\bin\g++.exe

 再次单击左下角的“Configure”按钮

 随后,在主界面中央生成了一系列红色加亮选项条的列表,同时下方信息栏中输出“Configuring  done”,表示编译器配置完成

这些红色加亮的选项并非都是必须编译的功能,要确保选中“WITH_OPENGL”和“WITH_QT”这两个编译选项。同时,要确保取消勾选“WITH_MSMF”编译选项

另外,为了将Contrib扩展库与OpenCV无缝整合,还需要设置OpenCV的外接模块路径,从众多的红色加亮选项条中找到一个名为“OPENCV_EXTRA_MODULES_ PATH”的选项,设置其值为“D:/Contrib_4.2.0-Source/modules

 设置完成后,再次单击“Configure”按钮,界面上的红色加亮的选项全部消失,若没有全部消失再点击“Configure”。

单击“Generate”,同时在下方信息栏中输出“Generating done”表示编译选项全部配置完成

 

 8.开始编译

所有的设置项都完成后,就可以开始编译了。

打开D:\OpenCV_4.2.0-Build\,点击Shift+右键,打开Powershell

 输入编译命令mingw32-make编译

如果电脑性能好可以用多线程 mingw32-make -j4

在进度显示100%时,出现“Built target opencv_version_win32”信息,表示编译成功。

 

 

9.安装OpenCV

编译完成的OpenCV库必须在安装后才能使用,在命令行中输入:mingw32-make install

命令窗口中输出安装过程及进度,安装过程比编译过程要快得多,很快就能安装好

此时,打开D:\OpenCV_4.2.0-Build文件夹,可以发现其下已经编译生成了很多文件

其中有一个名为“install”的子目录,进入其中即“D:\OpenCV_4.2.0-Build\install\x86\mingw\ bin”下的所有文件就是编译安装好的OpenCV库文件,将它们复制到Qt项目的Debug目录下就可以使用了。

 

10.编译时出错解决

1.问题1:Contrib_4.2.0-Source\modules\rgbd\src\dynafu.cpp:230:5: error: there are no arguments to 'glGenRenderbuffersEXT' that depend on a template parameter, so a declaration of 'glGenRenderbuffersEXT' must be available [-fpermissive]
     glGenRenderbuffersEXT(1, &fbo_depth);
     ^~~~~~~~~~~~~~~~~~~~~

 解决:

 添加代码:(下载更改后的dynafu.cpp:GitHub - alexfuyi/OpenCV4.2.0

// GL Extention definitions missing from standard Win32 gl.h
#if defined(_WIN32) && !defined(GL_RENDERBUFFER_EXT)
#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
#define GL_FRAMEBUFFER_EXT 0x8D40
#define GL_RENDERBUFFER_EXT 0x8D41
namespace {
PROC _wglGetProcAddress(const char *name)
{
  auto proc = wglGetProcAddress(name);
  if (!proc)
    CV_Error(cv::Error::OpenGlApiCallError, cv::format("Can't load OpenGL extension [%s]", name) );
  return proc;
}

void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers)
{
  static auto proc = reinterpret_cast<void(*)(GLsizei, GLuint*)>(_wglGetProcAddress(__func__));
  proc(n, framebuffers);
}
void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers)
{
  static auto proc = reinterpret_cast<void(*)(GLsizei, GLuint*)>(_wglGetProcAddress(__func__));
  proc(n, renderbuffers);
}
void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer)
{
  static auto proc = reinterpret_cast<void(*)(GLenum, GLuint)>(_wglGetProcAddress(__func__));
  proc(target, renderbuffer);
}
void glBindFramebufferEXT(GLenum target, GLuint framebuffer)
{
  static auto proc = reinterpret_cast<void(*)(GLenum, GLuint)>(_wglGetProcAddress(__func__));
  proc(target, framebuffer);
}
void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
  static auto proc = reinterpret_cast<void(*)(GLenum, GLenum, GLenum, GLuint)>(_wglGetProcAddress(__func__));
  proc(target, attachment, renderbuffertarget, renderbuffer);
}
void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
  static auto proc = reinterpret_cast<void(*)(GLenum, GLenum, GLsizei, GLsizei)>(_wglGetProcAddress(__func__));
  proc(target, internalformat, width, height);
}
} // anonymous namespace
#endif // defined(_WIN32) && !defined(GL_RENDERBUFFER_EXT)

2.问题2:D:\Contrib_4.2.0-Source\modules\xfeatures2d\src\boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: No such file or directory
           #include "boostdesc_bgm.i"
                    ^~~~~~~~~~~~~~~~~

 解决:把GitHub - alexfuyi/OpenCV4.2.0上的.i文件复制到D:\Contrib_4.2.0-Source\modules\xfeatures2d\src\

3.问题3:D:\Contrib_4.2.0-Source\modules\xfeatures2d\test\test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
 #include "features2d/test/test_detectors_regression.impl.hpp"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决:找到D:\Contrib_4.2.0-Source\modules\xfeatures2d\test\test_features2d.cpp和 D:\Contrib_4.2.0-Source\modules\xfeatures2d\test\test_rotation_and_scale_invariance.cpp

把引用头文件的test_detectors_invariance.impl.hpp,test_descriptors_invariance.impl.hpp,test_detectors_regression.impl.hpp,test_descriptors_regression.impl.hpp

改成绝对路径,如:

#include "D:/OpenCV_4.2.0-Source/modules/features2d/test/test_detectors_regression.impl.hpp"
#include "D:/OpenCV_4.2.0-Source/modules/features2d/test/test_descriptors_regression.impl.hpp"

#include "D:/OpenCV_4.2.0-Source/modules/features2d/test/test_detectors_invariance.impl.hpp"
#include "D:/OpenCV_4.2.0-Source/modules/features2d/test/test_descriptors_invariance.impl.hpp" 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值