java - Opencv xamarin findContours - 如何使用层次结构

标签 java c# android opencv xamarin

我有一个使用 opencv 的工作 C++ 程序,其中一部分是查找图像中整个单词的轮廓。

我有这个工作的 C++ 代码

vector<cv::Vec4i> hierarchy;
cv::findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
for (int i = 0; i >= 0; i = hierarchy[i][0])
    {
        ...
    }

我正在尝试使用 xamarin 将此代码转换为 C#,以便使用 java 版本的 opencv 在 Android 上运行。问题是我不知道如何在那里创建相同的 for 循环。

我有的是:

JavaList<MatOfPoint> contours = new JavaList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.FindContours(connected, contours, hierarchy, Imgproc.RetrCcomp, Imgproc.ChainApproxSimple, new Point(0, 0));

如何在此处编写相同的 for 循环? 我正在使用 2 级轮廓层次结构,因为我需要外部轮廓,而不是孔。

最佳答案

如果有人需要这个问题的答案,我很久以前就想到了,但没有时间发布。

for(int i = 0; i >= 0;)
    {
        ...
        double[] contourInfo = hierarchy.Get(0, i);
        i = (int)contourInfo[0]; // this gives next sibling
    }

在您理解此处的说明后,结果变得非常容易:http://docs.opencv.org/3.1.0/d9/d8b/tutorial_py_contours_hierarchy.html#gsc.tab=0

希望这对某人有帮助。

关于java - Opencv xamarin findContours - 如何使用层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118918/

相关文章:

java - 使用数组列表java进行插入排序

java - 在 Eclipse 的 Maven Dependencies 文件夹中按文本搜索文件

c# - 是否在 LINQ 中使用 AsEnumerable()?

c# - 无法加载 GAC 中找到的程序集

android - react-native log-android adb 调用失败

android - 如何在 Android 上以 ListView 显示文件

java - 查找数组中最低值的索引号

java - 如何将Assets文件夹复制到内部存储?

c# - Windows Phone 7 : How to parse Bezier Path string like in XAML?

Android 在不再可见时停止异步加载列表元素