用C++编写的图像处理函数,使用opencv2.3.1a,在Eclipse下编译,但cvFindContours函数报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C++编写的图像处理函数,使用opencv2.3.1a,在Eclipse下编译,但cvFindContours函数报错相关的知识,希望对你有一定的参考价值。

已经包含了"opencv2/imgproc/imgproc_c.h",但还是编译不通过。出现的提示信息是Invalid arguements 'Candidates are int cvFindContours(void *, CvMemStorage *, CvSeq * *, int, int, int, CvPoint)'

但是指定头文件里的cvFindContours的第一个参数是CvArr* 格式的啊,这是怎么回事呢?只有20分了,招待不周,还请各位高手解答。

参考技术A 没用过这一函数,是哪一个参数不对,能否强制转换

Android 将 C++ 转换/编译为 Neon

【中文标题】Android 将 C++ 转换/编译为 Neon【英文标题】:Android convert/compile C++ as Neon 【发布时间】:2014-04-23 06:51:58 【问题描述】:

我目前正在使用 C++ 在 JNI 和 OpenCV 的帮助下编写一个简单的 Android 程序。 输入是存储为 Mat 的图像。 我不想使用 OpenCV 的 normalize 函数,而是希望用 C++ 编写我自己的 normalize 函数。 据我所知,NEON 是有支持的。 但是,查看 NDK 文件夹中的 HelloNeon 示例,我意识到代码是用 NEON instrinsics 编写的。

问题: 有没有办法直接将我的 C++ 代码编译成 NEON 代码? 即我希望避免在 NEON 内在函数中编写我的函数。

谢谢。

【问题讨论】:

查看 Marat Dukhan 的 yeppp.info。不过我还没用过。 谢谢。我去看看。 【参考方案1】:

很大程度上取决于编译器。在最近的版本中,gcc 和 clang 都支持“自动矢量化”,但是生成代码的质量非常多变——主要取决于实际的源代码。与往常一样,编译器首先负责生成正确的代码,其次是生成快速/高效的代码。如果有疑问,请选择“安全”选项。

不过,它应该可以使用-mfpu=neon -ftree-vectorize

我确实希望您需要“按摩”代码以使其能够很好地矢量化 - 至少这是我在 x86 上的经验,其中编译器将在矢量化时尝试构建 SSE 指令。它在相当简单的情况下成功,但在代码更复杂时回退到“常规代码”。通常,后来的编译器确实比旧版本的编译器工作得更好。

如果您真的需要获得良好的矢量化结果,您可能最终需要使用 Neon 内在函数。

【讨论】:

公平地说:如果他想要好的结果,他必须在汇编程序中编写霓虹灯循环。从内在函数生成的代码仍然很糟糕。 我不确定 NDK 将什么用于其编译器。我目前的工作流程如下:编写 C++ -> 运行 ndk-build -> 运行 ant -> 安装 apk。我需要在哪里插入 NEON 选项?提到我使用 ubuntu 12.04 来执行此操作可能会有所帮助。 您使用的主机系统应该没有任何区别。 NDK 使用一个版本的 gcc - 取决于哪个版本的 NDK。您可能不得不摆弄 makefile 来构建代码以使其使用这些标志,因为我怀疑默认情况下会启用 Neon 代码和矢量化。但我看不到任何其他选择。 我目前正在使用 android-ndk-r9d-linux-x86_64。我不太确定如何摆弄 makefile 以启用从 C++ 到 NEON 的编译,因为给出的示例是用 instrinsics 编码的。你能指出我正确的方向吗?我知道有两个makefile。一个名为 Android.mk,另一个名为 Application.mk。我不知道要更改哪个以及如何更改。 抱歉,不确定,因为我的家用机器上没有 NDK(也不要在工作中这样做!)

以上是关于用C++编写的图像处理函数,使用opencv2.3.1a,在Eclipse下编译,但cvFindContours函数报错的主要内容,如果未能解决你的问题,请参考以下文章

C++ OpenCV 2.3 中缺少 MoveWindow()

无法使用 opencv2.3 imread 读取图像

Borland C++ 2009 中的 OpenCV

OpenCv2.3.1+VS2010+SIFT特征提取

使用 OpenCV 2.3.1 和 C++ 校准单个相机

如何在 Linux 平台上创建用于用 C++ 编写的临时文件?