我认为您可以尝试使用CIDetector来检测最大的矩形。这不是通用解决方案,因为此解决方案不适用于具有大矩形的图像,但是在您的示例中,它很好用:
- (CIImage*)processImage:(CIImage*)im
{
CIContext* context = [CIContext contextWithOptions:nil];
CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:context options:@{CIDetectorAspectRatio : @(1.0),
CIDetectorMinFeatureSize: @(180.0 / 225.0)}];
NSArray<CIRectangleFeature*>* rectangles = (NSArray<CIRectangleFeature*>*)[detector featuresInImage:im];
CIRectangleFeature* maxSizeRectangle = [rectangles firstObject];
for (CIRectangleFeature* feature in rectangles)
{
if (CGRectGetWidth(maxSizeRectangle.bounds) * CGRectGetHeight(maxSizeRectangle.bounds) < CGRectGetWidth(feature.bounds) * CGRectGetHeight(feature.bounds))
{
maxSizeRectangle = feature;
}
}
CIImage* result = im;
if (maxSizeRectangle)
{
result = [im imageByCroppingToRect:maxSizeRectangle.bounds];
}
return result;
}
主要思想在于检测器的选项(在CIDetectorMinFeatureSize和CIDetectorMinFeatureSize中),如果minFeatureSize太小,您会发现错误的矩形。该代码可很好地用于您所附加的示例(图像周围的黑线是图像视图的背景):