<p>我在生成Python2.7绑定时遇到了同样的问题。通过手动检查<code>opencv/CMakeLists.txt</code>文件找到了解决方案。我认为转移Python3的变量可以解决您的问题。在</p>
<h2>症状</h2>
<p>在开始构建opencv之前,您已经可以通过检查包含<code>To be built</code>或{<cd4>}的行中的cmake命令输出来判断是否将获得python绑定文件<code>cv2.so</code>。就我而言,我有:</p>
<pre><code>Unavailable: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv dnn_modern hdf java matlab ovis python2 python3 sfm viz
</code></pre>
<p>注意<code>python2</code>和{<cd6>}如何在结尾处立即显示为不可用。在</p>
<h2>修复(如果需要,将python2引用改为python3)</h2>
<p>在<code>CMakeLists.txt</code>中有一行包含</p>
^{pr2}$
<p>它旁边是一堆生成cmake命令输出的行。它们有助于了解cmake期望的变量。特别是,对numpy的引用对于构建python绑定是必需的。从这些行中,我了解到对于opencv 3.4.1,我必须使用以下命令调用cmake:</p>
<pre><code>-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include
-D PYTHON2_NUMPY_VERSION=1.12.1
</code></pre>
<p>我可以从您的命令中看到您使用了不推荐使用的<code>BUILD_NEW_PYTHON_SUPPORT</code>标志。对于opencv3.4,标志名已经更改,根据<code>CMakeLists.txt</code>的内容,新变量名为:</p>
<pre><code>-D BUILD_opencv_python3=ON
</code></pre>
<p>我还读到了另一个SO注释,即没有下面的标志(未测试)就不会生成<code>cv2.so</code>:</p>
<pre><code>-D BUILD_EXAMPLES=ON
</code></pre>
<h2>TL;DR</h2>
<p>对命令的编辑:</p>
<ul>
<li>删除:<code>-D BUILD_NEW_PYTHON_SUPPORT=ON</code></li>
<li>添加:<code>-D BUILD_opencv_python3=ON -D BUILD_EXAMPLES=ON -D PYTHON3_NUMPY_INCLUDE_DIRS=<path_to_numpy>/core/include -D PYTHON2_NUMPY_VERSION=<your_numpy_version></code></li>
</ul>