2010-03-07 24 views
6

Estoy intentando crear una aplicación de escritorio C# (con envoltura Emgu CV) que capture la alimentación de la cámara, detecte los bordes en la alimentación y luego muestre la fuente original (coloreado) con los bordes, por lo que es algo así como un avance y bordes de colores combinados. Conseguí con éxito la alimentación de la cámara. También detecto los bordes en la alimentación usando el método Canny. El problema es que mientras la alimentación original está en color, la detección de bordes se realiza en escala de grises (fondo negro, bordes blancos). Me gustaría saber cómo "fusionar" la alimentación de color con la alimentación de borde para producir una alimentación combinada.Cómo fusionar bordes detectados a una captura de color en Emgu CV

He intentado con el método Copiar en Emgu CV pero muestra un fondo negro y bordes correctamente coloreados (por ejemplo, si tengo un cubo rojo delante de la cámara, los bordes alrededor del cubo son de color rojo) .

Cualquier ayuda es muy apreciada.

Respuesta

6

OK, después de un poco de retoques, encontré la solución. El truco es usar la función Y en un resultado Canny invertido y la alimentación de color. Aquí está mi función que funciona con Application.Idle:

private void processFunction(object sender, EventArgs e) { 
     Image<Bgr, Byte> frame = c0.QueryFrame(); 
     Image<Gray, Byte> grayscale = frame.Convert<Gray, Byte>(); 
     grayscale = grayscale.Canny(new Gray(0), new Gray(255)).Not(); //invert with Not() 
     frame = frame.And(grayscale.Convert<Bgr, Byte>(), grayscale); //And function in action 
     imageBox1.Image = frame; 

    } 
Cuestiones relacionadas