Wandle CvMat * in 16 Bit Tiefe in 8 Bit Tiefe um

8

Ich arbeite mit Kinect und OpenCV. Ich suche bereits in diesem Forum, aber ich habe nichts gefunden wie mein Problem. Ich behalte die rohen Tiefendaten von Kinect (16 Bit), speichere sie in einem CvMat * und gebe sie dann an cvGetImage weiter, um daraus ein IplImage * zu erstellen:

%Vor%

Aber jetzt muss ich an diesem Bild arbeiten, um cvThreshold zu machen und Konturen zu finden. Diese 2 Funktionen benötigen ein 8-Bit-Tiefenbild in der Eingabe. Wie kann ich die CvMat * depthMetersMat in einem 8-Bit-Tiefen-CvMat * konvertieren?

    
Sirnino 02.08.2011, 08:50
quelle

2 Antworten

19

Die Antwort, die @SSteve gab, war fast der Trick für mich, aber der Aufruf von convertTo schien nur das höherwertige Byte abzubrechen, anstatt die Werte tatsächlich auf einen 8-Bit-Bereich zu skalieren. Da @Sirnino nicht angegeben hat, welches Verhalten gewünscht wurde, dachte ich, ich würde den Code veröffentlichen, der die (lineare) Skalierung durchführt, falls jemand anderes das tun möchte.

SSteves ursprünglicher Code:

%Vor%

Um die Werte zu skalieren, müssen Sie nur den Skalierungsfaktor (1/256 oder 0,00390625 für 16-Bit- bis 8-Bit-Skalierung) als dritten Parameter (Alpha) zum Aufruf von convertTo %Vor%

Sie können auch einen vierten Parameter (Delta) hinzufügen, der zu jedem Wert hinzugefügt wird, nachdem er mit Alpha multipliziert wurde. Weitere Informationen finden Sie in den Dokumenten .

    
Gillfish 02.05.2012 19:57
quelle
2
___ qstntxt ___

Ich arbeite mit Kinect und OpenCV. Ich suche bereits in diesem Forum, aber ich habe nichts gefunden wie mein Problem. Ich behalte die rohen Tiefendaten von Kinect (16 Bit), speichere sie in einem CvMat * und gebe sie dann an cvGetImage weiter, um daraus ein IplImage * zu erstellen:

%Vor%

Aber jetzt muss ich an diesem Bild arbeiten, um cvThreshold zu machen und Konturen zu finden. Diese 2 Funktionen benötigen ein 8-Bit-Tiefenbild in der Eingabe. Wie kann ich die CvMat * depthMetersMat in einem 8-Bit-Tiefen-CvMat * konvertieren?

    
___ tag123opencv ___ OpenCV (Open Source Computer Vision) ist eine plattformübergreifende Bibliothek von Programmierfunktionen für die Echtzeit-Bildverarbeitung. Es wurde 1999 offiziell von Intel ins Leben gerufen und wird nun von Itseez unterstützt. Verwendet werden: Mensch-Computer-Interaktion; Objektidentifikation, Segmentierung und Erkennung; Gesichtserkennung; Gestenerkennung; Bewegungsverfolgung, Bewegung Verständnis; Stereo- und Multikamera-Kalibrierung und Tiefenberechnung; Mobile Robotik. ___ tag123input ___ Die Eingabe bezieht sich normalerweise auf die Benutzereingabe, d. h. auf die Daten, die der Benutzer an eine laufende Anwendung liefert. In vielen Systemen wird diese Eingabe als potenziell gefährlich angesehen und muss bereinigt werden, um sicherzustellen, dass der Benutzer keinen ausführbaren Code in die Anwendung injiziert hat. ___ tag123kinect ___ Microsoft Kinect ist ein Motion-Sensing-Eingabegerät für Xbox 360, Xbox One und PCs. Durch die Kombination von Video- und Tiefenkameras ermöglicht Kinect Entwicklern eine berührungslose und immersive Benutzererfahrung durch Sprach-, Bewegungs- und Gestensteuerung. ___ tag123depth ___ Die Tiefe eines Knotens in einem Baum ist die Länge des Pfades zu seinem Stamm. Die Tiefe eines Bildes ist die Anzahl der Bits, die verwendet werden, um die Farbe eines einzelnen Pixels anzuzeigen. ___ qstnhdr ___ Wandle CvMat * in 16 Bit Tiefe in 8 Bit Tiefe um ___ answer10420743 ___

Die Antwort, die @SSteve gab, war fast der Trick für mich, aber der Aufruf von %code% schien nur das höherwertige Byte abzubrechen, anstatt die Werte tatsächlich auf einen 8-Bit-Bereich zu skalieren. Da @Sirnino nicht angegeben hat, welches Verhalten gewünscht wurde, dachte ich, ich würde den Code veröffentlichen, der die (lineare) Skalierung durchführt, falls jemand anderes das tun möchte.

SSteves ursprünglicher Code:

%Vor%

Um die Werte zu skalieren, müssen Sie nur den Skalierungsfaktor (1/256 oder 0,00390625 für 16-Bit- bis 8-Bit-Skalierung) als dritten Parameter (Alpha) zum Aufruf von %code% %Vor%

Sie können auch einen vierten Parameter (Delta) hinzufügen, der zu jedem Wert hinzugefügt wird, nachdem er mit Alpha multipliziert wurde. Weitere Informationen finden Sie in den Dokumenten .

    
___
SSteve 02.08.2011 16:07
quelle

Tags und Links