2016-08-05 14 views
-1

Ich habe an einem einfachen Video-over-IP-Programm gearbeitet, teilweise für den Einsatz in einem Projekt und teilweise um mir einige Grundlagen der Vernetzung mit High-Level-Schnittstellen zu lehren. Das Problem ist, dass ich die Daten von einem cv::Mat über das Netzwerk problemlos senden kann, aber sobald ich versuche, die Daten zu dekodieren, scheint es, dass viel von den Farbdaten fehlt. Der Code befindet sich in dieser gist, die alle Dateien enthält, die zum Erstellen und Ausführen des Projekts unter Linux erforderlich sind. Kann jemand etwas Licht darauf werfen?OpenCV Mat Korruption

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Sie müssen eine Webcam testen, fürchte ich.

Antwort

1

Wenn Sie Ihre Daten mit memcpy(m.data(), frame.data, frame.rows * frame.cols); kopieren, kopieren Sie nur ein Drittel der Gesamtdaten, da es sich bei Ihrem Bild um ein 3-Kanal-Bild handelt.

Versuchen Sie, es in memcpy(m.data(), frame.data, 3 * frame.rows * frame.cols); zu ändern (und reservieren Sie genügend Speicherplatz).

+0

Danke! Das behebt das Problem, sicher, dass die Farbdaten nur teilweise auf den Client kopiert wurden. Ich habe es nur mit deinen Änderungen arbeiten lassen und die Farbe wurde angezeigt, aber verzerrt. Das Entfernen von 'vmetadata.cvstep' aus dem' Mat'-Konstruktor im Client zeigte dann das korrekte Bild. – PyroAVR