使用CoreImage检测并替换图像中的白色边框吗?

问题描述 投票:1回答:1

想象您有几百个正方形图像,比如说专辑封面

enter image description here

一些有白色边框

enter image description here

注意10px左右的边框。

我正准备编写一些琐碎的光栅代码来检测和删除这些边界-只需用灰色填充它们即可。

但是:是否可以通过某种方式一举完成核心图像?

ios cifilter
1个回答
0
投票

我认为您可以尝试使用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太小,您会发现错误的矩形。该代码可很好地用于您所附加的示例(图像周围的黑线是图像视图的背景):result

© www.soinside.com 2019 - 2024. All rights reserved.