2016-03-19 2 views
2

In früheren Versionen von OpenCV gab es die Funktion Stream::enqueueUpload, die verwendet werden könnte, um Daten asynchron zusammen mit CudaMem auf die GPU hochzuladen (vergleiche: how to use gpu::Stream in OpenCV?). Diese Funktion existiert jedoch in OpenCV 3 nicht mehr. Die Klasse CudaMem ist ebenfalls verschwunden, wurde aber anscheinend durch die Klasse HostMem ersetzt.OpenCV3: wo ist cv :: cuda :: Stream :: enqueueUpload() weg?

Kann mir jemand sagen, wie man einen asynchronen Upload in OpenCV 3 durchführt?

Antwort

4

Es kann nun über void GpuMat::upload(InputArray arr, Stream& stream) Verfahren erfolgen:

cv::cuda::GpuMat d_mat; 
cv::cuda::HostMem h_mat; 
cv::cuda::Stream stream; 
d_mat.upload(h_mat, stream); 
+0

Danke, werde ich das versuchen! – user1488118

+0

Wie es scheint, ist dies der richtige Weg, es jetzt zu tun. Was ich noch wissen möchte: Ist es möglich _directly_ ein Bild in den seitengesperrten Speicher mit 'cv :: imread' zu lesen, um den zusätzlichen' cv :: Mat :: copyTo' zu vermeiden? – user1488118

+2

'cuda :: HostMem' liefert die statische' getAllocator'-Methode, die das 'MatAllocator'-Objekt zurückgibt. Sie können damit den Standardzuordner für 'cv :: Mat 'mit der Methode' cv :: Mat :: setDefaultAllocator' überschreiben. Danach können Sie 'cv :: Mat' Objekte anstelle von' cuda :: HostMem' verwenden. – jet47