由于DirectX,OpenCV构建失败

时间:2019-05-07 09:22:04

标签: c++ windows opencv mingw directx

我正在遵循此guide在Windows 7下为Qt5编译OpenCV。 我正在使用:

  • CMake 3.14.3
  • OpenCV 4.1.0
  • Qt 5.12.2

我已按照说明配置并设置了参数。然后开始编译。它失败并出现许多类似的错误:

C:\opencv\sources\modules\core\src\directx.cpp:1055:5: error: 'cl_context' was not declared in this scope
     cl_context context = (cl_context)ctx.ptr();
     ^~~~~~~~~~
C:\opencv\sources\modules\core\src\directx.cpp:1055:5: note: suggested alternative: '_onexit'
     cl_context context = (cl_context)ctx.ptr();
     ^~~~~~~~~~
     _onexit
C:\opencv\sources\modules\core\src\directx.cpp:1057:5: error: 'cl_int' was not declared in this scope
     cl_int status = 0;
     ^~~~~~
C:\opencv\sources\modules\core\src\directx.cpp:1057:5: note: suggested alternative: 'lrint'
     cl_int status = 0;
     ^~~~~~
     lrint
C:\opencv\sources\modules\core\src\directx.cpp:1058:12: error: expected ';' before 'clImage'
     cl_mem clImage = 0;
            ^~~~~~~
C:\opencv\sources\modules\core\src\directx.cpp:1062:5: error: 'clImage' was not declared in this scope
     clImage = clCreateFromD3D11Texture2DNV(context, CL_MEM_WRITE_ONLY, pD3D11Texture2D, 0, &status);
     ^~~~~~~
C:\opencv\sources\modules\core\src\directx.cpp:1062:5: note: suggested alternative: 'IplImage'
     clImage = clCreateFromD3D11Texture2DNV(context, CL_MEM_WRITE_ONLY, pD3D11Texture2D, 0, &status);
     ^~~~~~~
     IplImage
C:\opencv\sources\modules\core\src\directx.cpp:1062:44: error: 'context' was not declared in this scope
     clImage = clCreateFromD3D11Texture2DNV(context, CL_MEM_WRITE_ONLY, pD3D11Texture2D, 0, &status);
                                            ^~~~~~~
C:\opencv\sources\modules\core\src\directx.cpp:1062:44: note: suggested alternative: 'onexit'
     clImage = clCreateFromD3D11Texture2DNV(context, CL_MEM_WRITE_ONLY, pD3D11Texture2D, 0, &status);
                                            ^~~~~~~
                                            onexit
C:\opencv\sources\modules\core\src\directx.cpp:1062:53: error: 'CL_MEM_WRITE_ONLY' was not declared in this scope
     clImage = clCreateFromD3D11Texture2DNV(context, CL_MEM_WRITE_ONLY, pD3D11Texture2D, 0, &status);

我在CMake中禁用了WITH_DIRECTX标志,然后:

  1. 配置
  2. 生成
  3. mingw32-make clean
  4. mingw32-make -j 8

但是错误仍然存​​在。 我还必须做些什么来解决此问题?

1 个答案:

答案 0 :(得分:1)

要禁用DirectX,我还必须关闭与OpenCL相关的所有项目:

  • OPENCL_FOUND
  • OPENCV_DNN_OPENCL
  • WITH_OPENCL
  • WITH_OPENCLAMDBLAS
  • WITH_OPENCLAMDFFT
  • 与OPENCL_D3D11_NV
  • WITH_OPENCL_SVM

了解OpenCL与DirectX相关并不是那么简单。