如何编译原始 Haskell 绑定到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 存储库

Posted

技术标签:

【中文标题】如何编译原始 Haskell 绑定到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 存储库【英文标题】:How to compile the Raw Haskell bindings to OpenCV aka GitHub member arjuncomar's OpenCV-Raw repo 【发布时间】:2013-11-15 00:02:55 【问题描述】:

此链接 https://github.com/arjuncomar/opencv-raw/blob/master/README.md 处的 OpenCV-Raw readme.md 中的 Arjuncomar 状态

"编译/安装

目前编译这个包可能有点棘手,因为到目前为止我只有机会在我的机器上测试它。首先,您需要在您的机器上为 OpenCV 版本生成 C 包装器——这个 repo 仅包含 OpenCV 3.0 (HEAD) 的包装器。您可以通过以下方式生成这些包装器(以及相应的 Haskell 绑定):

./setup.sh <path to opencv headers>

例如

./setup.sh /usr/local/include"

我在 Opencv-Raw 的根目录中运行了“./setup.sh /usr/local/include”,顺便说一句,我在 Ubuntu Saucy 64 位上安装了 OpenCV 2.4.7,我收到了这个错误

 Traceback (most recent call last):
 File "cbits/genhsc.py", line 161, in <module>
 cgen.gen(header_dir, headers, dstdir)
 File "/home/w/Documents/opencv-raw-master/cbits/genc.py", line 367, in gen
 self.readHeaders(header_dir, srcfiles)
 File "/home/w/Documents/opencv-raw-master/cbits/genc.py", line 350, in readHeaders
 decls = parser.parse(header_dir + hdr)
 File "/home/w/Documents/opencv-raw-master/cbits/hdr_parser.py", line 732, in parse
 f = open(hname, "rt")
 IOError: [Errno 2] No such file or directory: '/usr/local/include/opencv2/core.hpp'

Arjuncomar 声明“此存储库仅包含 OpenCV 3.0 (HEAD) 的包装器”。所以我试图找到一个 OpenCV 3.0 下载,但没有运气,而且我从未在 /usr/local/include 中看到过 core.hpp 文件,所以不太了解错误。我正在尝试将 OpenCV 的 C++ 接口 arjuncomar 在他的 haskell 绑定中编写的自动生成的 C 包装器合并到我自己的 OpenCV 包装器中,用于另一种语言(当然减去 haskell 部分),我觉得这可能是一个很好的第一步,但如果我可以为这段代码制作一个make文件我/e

cpp 文件

void cv_imshow(String* winname, Mat* mat) 
    cv::imshow(*winname, *mat);

hpp 文件

void cv_imshow(String* winname, Mat* mat);

并期望它是 C++ OpenCV 代码的完美 C 包装器,请告诉我...如果可能,请在此处发布有关如何制作此类 make 文件的链接将有很大帮助....我已经习惯了C 但对 C++/C++ MakeFiles 来说是新手,我宁愿在第一次尝试时做到完美,这样我可以更快地输出音量而不必担心出错...

....任何帮助表示赞赏...美好的一天=) 各位...

【问题讨论】:

【参考方案1】:

我是图书馆作者。在 OpenCV 人员的要求下,该库已被移动了几次。它目前位于我的opencv_contrib repo 的分支中。按照自述文件中的说明构建和安装包装器。

该过程相当于设置一个 opencv 构建目录,让 cmake 通过告诉它 opencv 源代码树的位置以及它需要从 opencv_contrib 加载额外的模块来填充它。

cd <cmake build directory>
cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>

编译和安装库会将 C 包装头文件安装到“/include/opencv2/c/”,将编译后的二进制文件安装到“/lib/libopenc_c.so”。如果系统上存在cabalghc,它也会编译和安装Haskell 绑定。对我来说,这很简单:

make -j6 && sudo make install

以这种方式构建应该避免 OP 中列出的问题,因为标头由 cmake 从源代码树中提取并直接传递给标头解析器和包装器生成器。请将错误报告发送至opencv_raw repo 或opencv_contrib。我正在查看两个存储库,我总是很乐意接受拉取请求。

Edward -- 我知道您正试图与我取得联系。您可以通过 nrujac at gmail dot com 或直接在 github 上通过在任何 repos 上打开问题与我联系。

【讨论】:

【参考方案2】:

我发现这里只是 buld Arjun Comars fork https://github.com/arjuncomar/opencv,绑定将在 opencv_generated cpp 和 hpp 文件中自动生成

【讨论】:

以上是关于如何编译原始 Haskell 绑定到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 存储库的主要内容,如果未能解决你的问题,请参考以下文章

将原始 OpenCV 图像通过管道传输到 FFmpeg

将 C 库与 Haskell 库静态链接

VBO/FBO/DisplayLists 如何在 Haskell 的 OpenGL 绑定中工作?

编译器优化后如何分析 Haskell?

为 OpenCV 编译 MATLAB 绑定

OpenCV-Python绑定如何工作及如何扩展新模块到Python