Domanda

Sto usando EmguCV e sto cercando di sottrarre 2 immagini per creare un filtro simile a AForge .NET MoveTowards filtro.

Questo è ciò che la mia versione leggermente modificata da sopra l'URL, tenta di fare.Dato 2 immagini, la fonte e la sovrapposizione - lentamente si muove l'immagine di origine verso l'overlay.Ciò avviene sulla base dei seguenti:

result = source + movementFactor * (overlay - source);

dove il risultato, di origine e di sovrapposizione di immagini e movementFactor è il tasso di variazione nell'intervallo da 0 a 1.

Quando ho provato questo codice con movementFactor uguale a 1, il risultato sembrava incasinato (c'era qualcosa di simile a un movimento trail).Per testare ulteriormente, ho rimosso movementFactor dall'equazione di cui sopra, e fatto risultato = origine + overlay - source.Mi aspettavo di vedere l'immagine di sovrapposizione, come il risultato, che ho fatto, ma con una regione dell'immagine che stava lampeggiando.

Sto indovinando che pixel intensità di ottenere ritagliati nel limite superiore o inferiore quando l'addizione/sottrazione avviene.

Posso fare quello che voglio con questo:

for (int i = 0; i < src.Height; i++)
{
    for (int j = 0; j < src.Width; j++)
    {
        res[i, j] = new Gray(src[i, j].Intensity + movementFactor * (ovr[i, j].Intensity - src[i, j].Intensity));
    }
}

Ma in questo modo si rallenta il trattamento.Come posso superare l'aggiunta/sottrazione di problema o il problema di velocità con la sopra?Grazie per le vostre risposte!

È stato utile?

Soluzione

Ho posto la risposta che ho trovato qui, nel caso qualcuno attraversa lo stesso problema in futuro.

Questo è quanto si dovrebbe fare:

Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result);

Fonte:EmguCV del forum, qui è la post che mi ha dato la risposta

Altri suggerimenti

Ho posto la risposta che ho trovato qui, nel caso qualcuno attraversa lo stesso problema in futuro.

Questo è quanto si dovrebbe fare:

Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result); 

Fonte:EmguCV del forum, qui è la post che mi ha dato la risposta

Si noti che c'è un pulitore di sintassi che:

var result = frame.AddWeighted(1.0 - movementFactor, overlay, movementFactor, 0.0);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top