Bir aydan sonra son umutsuz denememin ardından OpenCV 2.2’yi CUDA enabled halde derleyebildim. Cahil olmamak lazım. Neyse OpenCV 2.2 ile birlikte kısmi CUDA desteği geldi. Fonksiyonların bi kısmını port etmişler. Sakın ola Canny’yi kullanmayın. Çünkü buglı bi fonksiyon. OpenCV’den gelmiyor tabi bug. CUDA Toolkit 4.0 RC’ye baktığımda o fonksiyonun toolkitten çıktığını gördüm. Bir haftamı yemişti çalıştırmaya uğraşmak. Buglı olduğu için çıkardılar sanırım.

OpenCV 2.2 ile güzel bir veri yapısı geliyor GpuMat diye. Gpu üzerinden malloc yapıyor. Resimler için yer alıyor. Kullanımını fevkalade minimalist yapmışlar. Super bir de interoperability koymuşlar. Daha önceki klasik OpenCV veri yapıları olan Mat ile IplImage ile güzel bir uyumu var.

Küçük bir örnek yapalım:

[php]IplImage *hostImg = cvLoadImage("C:\Temp\monas.jpg");

Mat m(hostImg);

GpuMat g(m);

imshow("Deneme", g);

waitKey(0);[/php]

Doğrudan IplImage*‘dan şöyle de GpuMat oluşturulabiliyor:

[php]GpuMat g(hostImg);[/php]

imshow ile bu 3 veri yapısı da kullanılabiliyor:

[php]imshow("Deneme", m);[/php]

[php]imshow("Deneme", hostImg);[/php]

OpenCV referans sitesinde baktığımda en basit GPU örneğinin çalıştıramadım. Orda doğrudan bir Mat’tan GpuMat’a atama var. Direk derlemede hata veriyor. Bana da biraz garip gelmişti. Bi kere memory adres evrenleri farklı. Kısmet hep.

Ve tabi ki unutmadan kullanılan header ve namespaceler (fazla header var):

[php]#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/gpu/gpu.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; using namespace gpu;[/php]