Ich verwende den EmguCV 3.0.0-Wrapper für die OpenCV 3.0-Bibliothek. Ich verwende die Mat
-Klasse an einigen Stellen. Hier ist ein Beispiel eines 8x8-Bildes mit einem Kanal, das aus double
-Werten besteht:
Die Klasse Image<>
bietet vernünftige Mittel zum Abrufen und Einstellen von Pixelwerten , und die Methode ist identisch für die Matrix<>
Klasse, aber es scheint nicht so offensichtlich für die Mat
Klasse. Die einzige Möglichkeit, wie ich einzelne Pixel einstellen kann, ist die Verwendung einer Maske:
Das ist fühlt wie es sollte zwei Zeilen sein, nicht sechs, so dass ich fühle, dass ich etwas vermisse. Die Dinge werden noch komplizierter, wenn Mat
mehr als ein Kanal ist, weil Matrix<>
nur 2D ist, also muss die Maske verwendet werden, um das Pixel auf jedem Kanal zu setzen.
Ich kann mir die Zeit oder den Speicher nicht leisten, um Pixel auf diese Weise zu setzen. Wie kann ich Pixel mit einem einzelnen Methodenaufruf festlegen?
Sie können Elemente von Mat abrufen, indem Sie nicht verwaltete Speicherblöcke mithilfe von DataPointer kopieren und verwaltete in nicht verwaltete Typen konvertieren. Die Einstellung von Werten erfolgt in der entgegengesetzten Richtung.
Für ein Beispiel können Sie eine solche Erweiterungsklasse verwenden
%Vor%Dann ist das Abrufen und Setzen von Werten durch einen einzigen Methodenaufruf möglich.
%Vor%Tests mit 200000000 Operationen zeigen, dass die Version des dynamischen Typs bis zu 2,5x langsamer als die statische Version sein kann.
%Vor%Tags und Links c# image-processing emgucv mat