2012-05-20 11 views
5

He Después de dos imágenes de fondo puede ser totalmente diferente de la imagen, por ejemplo, no solo color simplecuarzo: Obtención de las imágenes del diff de dos imágenes

Image number oneenter image description here

Así que básicamente quiere conseguir la diferencia de imágenes de estas dos imágenes, es decir,

enter image description here

La diferencia de imágenes de dos imágenes es la imagen con el mismo tamaño, pero el píxeles se establecen para que sean transparentes que no se han cambiado. La imagen de diferencia se construye a partir de los píxeles de diferencia con el color de la segunda imagen

Estoy buscando la solución basada en las técnicas de gráficos centrales, no sugiera ejecutar todos los píxeles en el ciclo. Me importa el rendimiento.

Como soy nuevo en Cuarzo me gustaría saber es posible lograr esto con máscaras? ¡O sugiera otro enfoque!

Actualización sobre el uso de la diferencia del modo mezclando realidad si uso la diferencia de modo que no resuelve mi problema, ya que no lleva colores adecuados de los píxeles de la mezcla. Si aplico modo de mezcla a diferencia de 2 imágenes por encima voy a conseguir siguiendo

enter image description here

que parece haber invertido los colores de los píxeles y luego si les invierto consigo siguiente

enter image description here

que en realidad no es lo que quería, ya que los colores de los píxeles son totalmente diferentes

+0

respuesta aceptada en http : //stackoverflow.com/questions/3901404/create-a-mask-from-difference-between-two-images-iphone parece que podría ayudar. –

+0

@rokjarc gracias por el enlace, pero el modo de fusión diferencia no es una solución en mi caso, acaba de actualizar las imágenes de ejemplo para demostrarlo. – deimus

+0

¿Qué sucede si simplemente dibuja una imagen en la otra después de configurar 'CGContextSetBlendMode (kCGBlendModeDifference);' ¿Eso no le da lo que busca? –

Respuesta

6

Usted puede mezclar cualquier dibujo en el núcleo de gráficos usando

CGContextSetBlendMode(kCGBlendModeDifference); 

Al dibujar la primera imagen y luego establecer el modo de fusión a la diferencia y dibujar la segunda imagen, obtendrá la diferencia (como sugerí en mi comentario). Esto le da una imagen invertida (como se ve en su pregunta de actualizaciones). Para invertir la imagen, puede rellenar el mismo rectángulo con el uso de color blanco (ya que el modo de fusión aún está configurado en "diferencia").

CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(context, frame); 

Código de ejemplo para hacer todo esto (en el interior drawRect :) se ve a continuación.

CGContextRef context = UIGraphicsGetCurrentContext(); 

// Your two images 
CGImageRef img1 = [[UIImage imageNamed:@"Ygsvt.png"] CGImage]; 
CGImageRef img2 = [[UIImage imageNamed:@"ay5DB.png"] CGImage]; 

// Some arbitrary frame 
CGRect frame = CGRectMake(30, 30, 100, 100); 

// Invert the coordinates to not draw upside down 
CGContextTranslateCTM(context, 0, frame.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

// Draw original image 
CGContextDrawImage(context, frame, img1); 

// Draw the second image using difference blend more over the first 
CGContextSetBlendMode(context, kCGBlendModeDifference); 
CGContextDrawImage(context, frame, img2); 

// Fill the same rect with white color to invert 
// (still difference blend mode) 
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(context, frame); 
+0

Gracias por el código David, pero como ya mencioné que la diferenciación no es mi solución, he actualizado la pregunta con una mejor definición de la imagen de diferencia. En realidad, la imagen de diferencia de dos imágenes es la imagen con el mismo tamaño, pero los píxeles están configurados para ser transparentes y no han cambiado. La imagen de diferencia se construye a partir de los píxeles de diferencia con el color de la segunda imagen – deimus

+1

Entonces, básicamente, ¿desea utilizar la máscara de la segunda imagen donde hay diferencias? –

+0

¡Sí exactamente! ¿Alguna idea de cómo construir la máscara? – deimus

Cuestiones relacionadas