Frage

Ich verwende EmguCV und ich versuche, zwei Bilder zu subtrahieren, um einen Filter ähnlich wie AForge .NET des MoveTowards Filter.

Das ist, was meine leicht modifizierte Version der oben genannten URL zu tun versucht. Gegeben 2 Bilder, die Quelle und das Overlay - es bewegt sich langsam das Quellbild in Richtung der Überlagerung. Er tut dies auf der Grundlage der folgenden:

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

Dabei Ergebnis Quelle und Overlay sind Bilder und movementFactor ist die Änderungsrate im Bereich von 0 bis 1.

Als ich versuchte, dies in Code mit movementFactor gleich 1 ist, sah die Ergebnisse verkorkste (es war so etwas wie eine Bewegung Trail). Um es zu testen weiter entfernte ich movementFactor aus der obigen Gleichung und machte Ergebnis = Quelle + Overlay - Quelle. Ich erwartete das Overlay-Bild als das Ergebnis zu sehen, was ich auch tat, aber zusammen mit einer Region des Bildes, das wurde zu blinken.

Ich vermute, dass Pixelintensitäten in den oberen oder unteren Grenzen abgeschnitten werden, wenn Addition / Subtraktion stattfindet.

kann ich erreichen, was ich mit diesem wollen:

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));
    }
}

Aber dies deutlich verlangsamt die Verarbeitung. Wie kann ich die Addition / Subtraktion Problem oder die Geschwindigkeit Problem mit der oben überwinden? Vielen Dank für Ihre Antworten!

War es hilfreich?

Lösung

Ich werde nach der Antwort, die ich hier gefunden, falls jemand über das gleiche Problem in der Zukunft ausgeführt wird.

Dies ist, wie Sie es tun würde:

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

Quelle: EmguCV Foren, hier ist die Post das gab mir die Antwort

Andere Tipps

  

Ich werde nach der Antwort, die ich hier gefunden, falls jemand läuft über   das gleiche Problem in der Zukunft.

     

Dies ist, wie Sie es tun würde:

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

Quelle: EmguCV Foren, hier ist die   Post, die gab mir die Antwort

Beachten Sie, dass es eine sauberere Syntax dafür:

var result = frame.AddWeighted(1.0 - movementFactor, overlay, movementFactor, 0.0);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top