Nun, hier ist mein Verständnis, vielleicht nicht 100% richtig, und entschuldige mich für meine Nicht-Mutter-lang-Englisch.
GpuMat
verwendet Global Memory. OpenGL-Texturen befinden sich jedoch in Texturspeicher, der speziell für die Textur-Hardware der GPU (nicht für CUDA-Kerne) entwickelt wurde. Textur mem sind nicht wie üblich lineare 2D/3D-Arrays organisiert, es kann bestimmte Space Filling Curve verwenden, um seinen Inhalt zu organisieren, um die Textur-Cache-Rate zu optimieren. Daher können Sie keinen Gerätezeiger auf Texture legen. Sie können Texture Mem direkt in CUDA über Texture Fetch (Read Only) oder Surface R/W erreichen.
Aktuelle OpenCV-Implementierung scheinen nicht Cuda Textur/Oberfläche Feature zu verwenden. Sie müssen von Texturen in den globalen Speicher kopieren, um sie als GpuMat
s zu binden. Nun, nicht ganz "bind" -Lösung.
This thread beschreibt eine CUDA-Methode zum Schreiben in OpenGL-Texturen.
Entweder warten OpenCV die neue Funktion zu implementieren, oder warten NVIDIAs neue GPU-Architektur Texture Mem und Global Mem Vereinheitlichung, oder warten Sie jemand ein spezielles EMP-Gerät erfinden, diese Erinnerungen zu hacken ... XD