在使用OpenCV2.4.x的時候,以為不用重新編譯可以直接使用GPU模塊,不過在我使用的時候,發現使用getCudaEnabledDeviceCount()的時候,總是獲得是0,於是重新編譯OpenCV,這個是一個漫長的過程,尤其是編譯GPU模塊。對於如果編譯OpenCV網上教程都比較多,這個不在敘述,下面主要說一下surf的那個demo
運行結果如下:
主要要注意的在GPU中使用的Mat類型為GpuMat,讀取普通的Mat要通過upload轉變。主要也就是把內存中的Mat復制到顯存中。
使用的surf也是使用SURF_GPU,還有就是關鍵點的類型為GpuMat,這樣就申明在GPU中運算。
SURF_GPU surf;
GpuMat keypoints1GPU, keypoints2GPU;
GpuMat descriptors1GPU, descriptors2GPU;
surf(img1, GpuMat(), keypoints1GPU, descriptors1GPU);
surf(img2, GpuMat(), keypoints2GPU, descriptors2GPU);
最終得到的關鍵點要從顯存中復制到內存當中,使用
surf.downloadKeypoints(keypoints1GPU, keypoints1);
在使用的時候,在GPU上執行,應該所有的類型都是GPU的類型,這個注意好,還有就是內存跟顯存之間的復制這個注意好,這樣基本的使用應該就沒有問題了。