我有他们周围有白色边框的图像。我想在运行时摆脱边界。检测图像周围的修剪单色框架
一个简单而缓慢的算法来做到这一点会是这样的:
- 扫描每一行从上往下,停止,如果行中的像素不是白色。
- 对所有4条边做同样的事情。
这样,我学会了每边的白色边框的宽度,并可以相应地修剪它。
上面的方法相当慢,我想。有没有更有效的方法来实现这一点?即,iOS是否提供了帮助完成此任务的任何功能?
我有他们周围有白色边框的图像。我想在运行时摆脱边界。检测图像周围的修剪单色框架
一个简单而缓慢的算法来做到这一点会是这样的:
这样,我学会了每边的白色边框的宽度,并可以相应地修剪它。
上面的方法相当慢,我想。有没有更有效的方法来实现这一点?即,iOS是否提供了帮助完成此任务的任何功能?
它可能不是最好的解决方案,但正如你所说,你可以检查颜色,然后修剪。下面是图像中获得像素的颜色的方法:即修剪
- (UIColor)colorOfPixelAtLocation:(CGPoint)position inImage:(UIImage *)image
{
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
int pixelInfo = ((image.size.width * position.y) + position.x) * 4; // PNG
UInt8 red = data[pixelInfo];
UInt8 green = data[(pixelInfo + 1)];
UInt8 blue = data[pixelInfo + 2];
CFRelease(pixelData);
return [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.0f];
}
和代码:
CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
// Use the image
CGImageRelease(imageRef);
我希望它能帮助。
是的,很好。这是我已经知道的部分,我认为这是不好的选择。我也只是在这里找到了类似的答案:http://stackoverflow.com/questions/20056870/trim-uiimage-border –
我只是作弊。假设您的图像周围有一个10像素的白色边框,并且图像为200x 200,则将其显示在尺寸为180x180的UIImageView中,并将其居中放大:P
我不能这样做,因为我不知道我要去的图像边框的尺寸展示。这就是为什么我需要在运行时检测它们的原因。 –
您可能可以配对阈值操作所有不是白色的),打开或关闭操作(去除不是来自边界的小特征)以及哈里斯角点检测:http://stackoverflow.com/questions/10530846/determine-the-corners-一张纸与 - ios-5-av-foundation-and-core-imag/10623563#10623563。我在GPUImage中执行所有这些操作,就像我在链接的答案中显示的一样,但结果可能取决于图像的细节。 –