我正在使用此链接中的库: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
做得更好。(你可以做得更好,但这并不明显)