获得最大的结构(Canny边缘检测)



我正在使用此链接中的库:https://code.google.com/p/simple-iphone-image-processing/

我实现了Image.h和Image.mm,并使用以下代码获得了Canny边缘检测过滤器:

- (IBAction)findEdges {
    ImageWrapper *greyScale=Image::createImage(_sourceImage, _sourceImage.size.width/4, _sourceImage.size.height/4);
    ImageWrapper *edges=greyScale.image->gaussianBlur().image->cannyEdgeExtract(0.4,0.6);
    // show the results
    UIImage *newimageView = edges.image->toUIImage();
    _imageView.image = newimageView;
}

现在我注意到有一个叫做findLargestStructure的方法。这就是方法:

void Image::findLargestStructure(std::vector<ImagePoint> *maxPoints) {
    // process the image
    std::vector<ImagePoint> points;
    points.reserve(10000);
    for(int y=0; y<m_height; y++) {
        for(int x=0; x<m_width; x++) {
            // if we've found a point in the image then extract everything connected to it
            if((*this)[y][x]!=0) {
                extractConnectedRegion(x, y, &points);
                if(points.size()>maxPoints->size()) {
                    maxPoints->clear();
                    maxPoints->resize(points.size());
                    std::copy(points.begin(), points.end(), maxPoints->begin());
                }
                points.clear();
            }
        }
    }
}

我的问题是,这个方法到底做什么?我如何从Objective C代码中调用/使用它?最后,我的目标基本上是使用这个库的Canny边缘检测,并通过使用最大结构的边缘点的平均值从中导出CGRect,然后在我的应用程序中使用它。

那么,上面的方法是否会返回这些点的向量?我熟悉Objective-C,但我对C++不太熟悉。

如有任何帮助/提示,我们将不胜感激!

该代码与Objective C不兼容,因为它在接口中使用C++类型,即std::vector<>

该代码在多个点上调用extractConnectedRegion,并尝试返回最大的结果。这里有一些小的缺点:例如,分配给maxPoints会比maxPoints = points做得更好。(你可以做得更好,但这并不明显)

最新更新