我正在使用此链接中的库: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 ++并不是很了解。
非常感谢任何帮助/提示!
答案 0 :(得分:0)
代码与Objective C不兼容,因为它在接口中使用C ++类型,即std::vector<>
。
代码在许多点上调用extractConnectedRegion
,并尝试返回最大的结果。有一些小的挑剔:例如作为maxPoints
,对maxPoints = points
的分配会做得更好。 (你可以做得更好,但这变得不明显)