【问题标题】:How to compile the Raw Haskell bindings to OpenCV aka GitHub member arjuncomar's OpenCV-Raw repo如何编译原始 Haskell 绑定到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 存储库
【发布时间】:2025-12-07 04:50:01
【问题描述】:

此链接 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 来说是新手,我宁愿在第一次尝试时做到完美,这样我可以更快地输出音量而不必担心出错...

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

【问题讨论】:

    标签: c++ c opencv haskell wrapper


    【解决方案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 repoopencv_contrib。我正在查看两个存储库,我总是很乐意接受拉取请求。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】: