Wie kann ich den Unterschied zwischen 2 Bildern erkennen, indem ich eine Maske des Bereichs erstelle, der sich unterscheidet, um den Bereich zu verarbeiten, der beiden Bildern gemeinsam ist (zum Beispiel Gaußscher Weichzeichner)?
BEARBEITEN: Ich verwende derzeit diesen Code, um den RGBA-Wert von Pixeln zu erhalten:
+ (NSArray*)getRGBAsFromImage:(UIImage*)image atX:(int)xx andY:(int)yy count:(int)count
{
NSMutableArray *result = [NSMutableArray arrayWithCapacity:count];
// Zuerst das Bild in den Datenpuffer bekommen
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
// Jetzt enthält rawData die Bilddaten im RGBA8888-Pixelformat.
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
for (int ii = 0 ; ii < count ; ++ii)
{
CGFloat red = (rawData[byteIndex] * 1.0) / 255.0;
CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;
CGFloat blue = (rawData[byteIndex + 2] * 1.0) / 255.0;
CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;
byteIndex += 4;
UIColor *acolor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
[result addObject:acolor];
}
free(rawData);
return result;
}
Das Problem ist, die Bilder werden von der Kamera des iPhones erfasst, daher sind sie nicht genau in derselben Position. Ich muss Bereiche von ein paar Pixeln erstellen und die allgemeine Farbe des Bereichs extrahieren (vielleicht durch Addition der RGBA-Werte und Division durch die Anzahl der Pixel?). Wie könnte ich das tun und es dann in eine CGMask übersetzen?
Ich weiß, dass dies eine komplexe Frage ist, also wäre jede Hilfe willkommen.
Danke.