Reemplazo de color en imagen para aplicación de iphone.

Básicamente quiero implementar la función de reemplazo de color para mi aplicación de pintura. A continuación se muestran los resultados originales y esperados.

Original:

Después de cambiar el color de la pared seleccionado por el usuario, junto con algún umbral para el reemplazo

 He intentado dos enfoques pero no pude trabajar como se esperaba

Enfoque 1:
Relleno de inundación basado en cola Algoritmo para la sustitución de color, pero con un rendimiento inferior a I con terriblemente lento y la sombra de la pared no se ha conservado.

Enfoque 2: Así que he tratado de buscar otra opción y encontré debajo de la publicación de SO¿Cómo cambiar un color particular en una imagen?

pero no pude entender la lógica y no estoy seguro de la implementación de mi código desde el paso 3.

Por favor encuentre el código de abajo para cada paso con mi entendimiento.

1) Convierta la imagen de RGB a HSV usando cvCvtColor (solo queremos cambiar el tono).

 IplImage *mainImage=[self CreateIplImageFromUIImage:[UIImage imageNamed:@"original.jpg"]];
 IplImage *hsvImage = cvCreateImage(cvGetSize(mainImage), IPL_DEPTH_8U, 3);
 IplImage *threshImage = cvCreateImage(cvGetSize(mainImage), IPL_DEPTH_8U, 3);
 cvCvtColor(mainImage,hsvImage,CV_RGB2HSV);

2) Aísle un color con cvThreshold especificando una cierta tolerancia (desea un rango de colores, no un color plano).

cvThreshold(hsvImage, threshImage, 0, 100, CV_THRESH_BINARY);

3) Deseche las áreas de color por debajo de un tamaño mínimo utilizando una biblioteca de detección de manchas como cvBlobsLib. Esto eliminará puntos del color similar en la escena.¿Necesito especificar la imagen original o la imagen de tres centavos?

CBlobResult blobs = CBlobResult(threshImage, NULL, 0);
blobs.Filter( blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 10);

4) Enmascare el color con cvInRangeS y use la máscara resultante para aplicar el nuevo tono.

No estoy seguro acerca de esta función de cómo ayuda en el reemplazo de color y no puede entender los argumentos que se deben proporcionar.

5) cvMuege la nueva imagen con el nuevo matiz con una imagen compuesta por los canales de saturación y brillo que guardó en el paso uno.

Entiendo que cvMerge fusionará tres canales de H S y V, pero cómo puedo usar la salida de los tres pasos anteriores.

así que básicamente atascado con la implementación opencv,

si es posible, por favor guíeme para la implementación de opencv o cualquier otra solución para probar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta