2013-05-21 32 views
1

我想頁面鎖定已創建的墊子。 考慮下面的示例代碼:OpenCV 2.4.4與CUDA:registerPageLocked失敗

... 
Mat cpuGray; 
GpuMat gpuGray; 
cv::cvtColor (cpuColor, cpuGray, CV_BGR2GRAY); 
registerPageLocked(cpuGray); 
gpuStream.enqueueUpload(cpuGray, gpuGray); 
... 

在運行時,這個失敗:

OpenCV Error: Gpu API call (invalid argument) in registerPageLocked, file ../gpu/src/matrix_operations.cpp, line 194 
terminate called after throwing an instance of 'cv::Exception' 
    what(): ../gpu/src/matrix_operations.cpp:194: error: (-217) invalid argument in function registerPageLocked 
Aborted 

有誰知道我在做什麼造成這個錯誤? 在此先感謝

回答

1

我認爲你的cpuGray可能是一個空矩陣。功能registerPageLocked(cpuGray)需要知道需要多少內存頁面鎖定cpuGray。確保cpuGray不是空矩陣。 cpuGray

cv::cvtColor (cpuColor, cpuGray, CV_BGR2GRAY); 

初始化,以便確保cpuColor不爲空。

+0

謝謝亞歷克斯,但我也想到了 - 現在我調用registerPageLocked之前探測gpuGray的大小和指針。 – user2407197

+0

@ user2407197當然,你是這麼做的嗎? – Alexey

+0

不,即使輸入Mat有效且不爲空,它仍會失敗並出現相同的錯誤。 – user2407197