CIDetector无法检测到最大的矩形。左图像是原始图像,右图像是矩形检测图像。它没有检测到整个矩形。我该如何解决?
- (CIDetector *)highAccuracyRectangleDetector
{
static CIDetector *detector = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
detector = [CIDetector detectorOfType:CIDetectorTypeRectangle
context:nil options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];
});
return detector;
}
- (CIRectangleFeature *)_biggestRectangleInRectangles:(NSArray
*)rectangles
{
if (![rectangles count]) return nil;
float halfPerimiterValue = 0;
CIRectangleFeature *biggestRectangle = [rectangles firstObject];
for (CIRectangleFeature *rect in rectangles)
{
CGPoint p1 = rect.topLeft;
CGPoint p2 = rect.topRight;
CGFloat width = hypotf(p2.x - p1.x, p2.y - p1.y);
CGPoint p3 = rect.topLeft;
CGPoint p4 = rect.bottomLeft;
CGFloat height = hypotf(p4.x - p3.x, p4.y - p3.y);
CGFloat currentHalfPerimiterValue = (height)+(width);
_RectHeight = height;
_RectWidth = width;
if (halfPerimiterValue < currentHalfPerimiterValue)
{
halfPerimiterValue = currentHalfPerimiterValue;
biggestRectangle = rect;
NSLog(@"height %@", @(height));
NSLog(@"width %@", @(width));
}
}
return biggestRectangle;
}
答案 0 :(得分:1)
最后我通过添加CIDetectorAspectRatio解决了这个问题:@ 1.667,CIDetectorMaxFeatureCount:@ 5
- (CIDetector *)highAccuracyRectangleDetector
{
static CIDetector *detector = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
detector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:nil options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh, CIDetectorAspectRatio: @1.667, CIDetectorMaxFeatureCount: @5}];
});
return detector;
}