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

时间:2013-08-05 05:39:19

标签: c++ ios objective-c vector edge-detection

我正在使用此链接中的库: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 Edge Detection这个库并通过使用最大结构的边缘点的平均值以某种方式从中导出CGRect,然后在我的应用程序中使用它。

上面的方法会返回这些点的向量吗?我熟悉Objective-C,但我对C ++并不是很了解。

非常感谢任何帮助/提示!

1 个答案:

答案 0 :(得分:0)

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

代码在许多点上调用extractConnectedRegion,并尝试返回最大的结果。有一些小的挑剔:例如作为maxPoints,对maxPoints = points的分配会做得更好。 (你可以做得更好,但这变得不明显)