<p>如果有人需要的话,这就是我目前所拥有的。基本上是一个BriskFeatureDetector,它可以在Python中创建,然后调用detect。大部分只是确认/复制obmarg向我展示的内容,但我已经将所有细节添加到pyd库中。</p>
<p>但detect方法对我来说仍然不完整,因为它不转换数据类型。任何人谁知道一个很好的方法来改善这一点,请做!例如,我确实找到了<a href="http://www.ros.org/doc/api/pano_py/html/numpy__to__mat_8cpp_source.html" rel="nofollow">this library</a>,它似乎将numpy ndarray转换成了cv::Mat,但是我现在没有时间去想如何集成它。还需要转换其他数据类型。</p>
<p><strong>安装<a href="http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/" rel="nofollow">OpenCV 2.2</a></strong></p>
<ul>
<li>对于下面的设置,我安装到<code>C:\opencv2.2</code></li>
<li>API或实现的某些内容在2.4版本中发生了变化,这给了我一些问题(可能是新的算法对象?)所以我坚持使用BRISK开发的2.2。</li>
</ul>
<p><strong>使用Boost Python安装<a href="http://www.boost.org/users/download/" rel="nofollow">Boost</a></strong></p>
<ul>
<li>对于下面的设置,我安装到<code>C:\boost\boost_1_47</code></li>
</ul>
<p><strong>创建Visual Studio 10项目:</strong></p>
<ul>
<li>新建项目-->;win32</li>
<li>对于下面的设置,我将其命名为<code>brisk</code></li>
<li>下一个-->;DLL应用程序类型;空项目-->;已完成</li>
<li>在顶部,从<strong>Debug</strong>Win32更改为<strong>Release</strong>Win32</li>
</ul>
<p><strong>在源文件中创建main.cpp</p>
<P>在项目设置之前这样做,以便C++选项在项目设置</P>中可用。
<pre><code>#include <boost/python.hpp>
#include <opencv2/opencv.hpp>
#include <brisk/brisk.h>
BOOST_PYTHON_MODULE(brisk)
{
using namespace boost::python;
//this long mess is the only way I could get the overloaded signatures to be accepted
void (cv::BriskFeatureDetector::*detect_1)(const cv::Mat&,
std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint>>&,
const cv::Mat&) const
= &cv::BriskFeatureDetector::detect;
void (cv::BriskFeatureDetector::*detect_vector)(const std::vector<cv::Mat, std::allocator<cv::Mat>>&,
std::vector< std::vector< cv::KeyPoint, std::allocator<cv::KeyPoint>>, std::allocator< std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint>>>>&,
const std::vector<cv::Mat, std::allocator<cv::Mat>>&) const
= &cv::BriskFeatureDetector::detect;
class_< cv::BriskFeatureDetector >( "BriskFeatureDetector", init<int, int>())
.def( "detect", detect_1)
;
}
</code></pre>
<p><strong>项目设置(右键单击项目-->;属性):</strong></p>
<ol>
<li><p>包含/标题</p>
<ul>
<L>配置属性-gt;C/C++ + ->一般</LI>
<li><p>添加到附加的Include目录(调整到您自己的python/brisk/etc.base路径):</p>
<p><code>C:\opencv2.2\include;</code></p>
<p><code>C:\boost\boost_1_47;</code></p>
<p><code>C:\brisk\include;C:\brisk\thirdparty\agast\include;</code></p>
<p><code>C:\python27\include;</code></p></li>
</ul></li>
<li><p>库(链接器)</p>
<ul>
<li>配置属性-->;链接器-->;常规</li>
<li><p>添加到<strong>其他库目录(调整到您自己的python/brisk/etc.基本路径):</p>
<p><code>C:\opencv2.2\lib;</code></p>
<p><code>C:\boost\boost_1_47\lib;</code></p>
<p><code>C:\brisk\win32\lib;</code></p>
<p><code>C:\python27\Libs;</code></p></li>
<li><p>配置属性-->;链接器-->;输入</p></li>
<li><p>添加到附加依赖项(根据您自己的python/brisk/etc.base路径调整):</p>
<p><code>opencv_imgproc220.lib;opencv_core220.lib;opencv_features2d220.lib;</code></p>
<p><code>agast_static.lib; brisk_static.lib;</code></p>
<p><code>python27.lib;</code></p></li>
</ul></li>
<li><p>.pyd输出而不是.dll</p>
<ul>
<li>配置属性-->;常规</li>
<li>将目标扩展名更改为.pyd</li>
</ul></li>
</ol>
<p><strong>必要时生成并重命名</strong></p>
<ul>
<li>右键单击解决方案并生成/重建</li>
<li>您可能需要将输出从“Brisk.pyd”重命名为“Brisk.pyd”,否则python将给出无法加载DLL的错误</li>
<li>通过将brisk.pyd放入站点包或放置链接到其路径的.pth文件,使其对python可用</li>
</ul>
<p><strong>更新路径环境变量</p>
<ul>
<li><p>在“windows设置”中,确保路径中包含以下内容(再次,根据路径调整):</p>
<pre><code>`C:\boost\boost_1_47\lib;C:\brisk\win32\bin`
</code></pre></li>
</ul>