Ask Your Question

Revision history [back]

OpenCV ocl function with POCL and Raspberry Pi2

Hi everyone.

I try to install OpenCL on the Raspberry Pi2. The operating system is Ubuntu Mate. Because Pi2's CPU is ARMv7a.

So that I find the POCL-0.12 as the solution for being the OpenCL platform. After build and install POCL, it works fine!!(The test of example all pass) And I can find the platform and device as the figure shows. image description

Then I try to install OpenCV 2.4.11 on the Ubuntu Mate. It also works fine!! (The test of example all pass)

Now I try to use the ocl::xxx() function in OpenCV. When compile and run time, it doesn't show any error or wrong. And I can use ocl::oclMat to create the image. But when I use the function like ocl::cvtColor() or ocl::equlizeHist(). It just like pass the code and didn't do anythings ?? here is my code..

void OpenCL_info() {

ocl::PlatformsInfo platform;                                                             
ocl::getOpenCLPlatforms(platform);
//const ocl::PlatformInfo *pInfo = platform.at(0);
bool deviceFound = false;
ocl::DevicesInfo device;
ocl::DeviceType type = ocl::CVCL_DEVICE_TYPE_CPU;
deviceFound = ocl::getOpenCLDevices(device,type);
ocl::setDevice(device.at(0));

cout<<endl;
cout<<"======== Platforms ========"<<endl;
for(int i=0;i<(int)platform.size();i++)
{
    cout<<"Platforms  "<<i+1<<" :"<<platform.at(i)->platformName<<endl;
}
cout<<endl;
/*
   for(int i=0;i<(int)device.size();i++)
   {
   cout<<"Device  "<<i+1<<" :"<<device.at(i)->deviceName<<endl;
   }
 */


if(deviceFound)
{
    cout<<"Found device!"<<endl;
    cout<<"Now set the device to "<<device.at(0)->deviceName<<endl;
}
else
{
    cout<<"Not found!"<<endl;
}

}

int main(){

vector<Rect> f;
Mat Image;

Image = imread("wang.png");
if (Image.cols == 0) {
    cout << "Error reading file " << endl;
    return -1;
}

resize(Image,Image,Size(640,480),0,0,1);
ocl::oclMat gray(Image);
struct timespec t1,t2;
cout<<endl;
cout<<"====Start gray===="<<endl;
clock_gettime(CLOCK_REALTIME, &t1);
ocl::cvtColor(gray,gray,CV_BGR2GRAY);
clock_gettime(CLOCK_REALTIME, &t2);
cout<<"====End gary===="<<endl;
diff(t1,t2);

//ocl::equalizeHist(gray,gray);

OpenCL_info();

gray.download(Image);

/*
for(unsigned int i=0;i<f.size();i++){
    Rect f_rect = f[i];
    rectangle(Image,f_rect,CV_RGB(255,0,0),1,8,0);
}
*/
cout<<"OK"<<endl;

namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.

imshow("face",Image);

waitKey(0);
return(0);

}

And the result shows--> image description

No error. the screen shows nothing. But I can detect the platform and device by ocl::getOpenCLPlatforms, ocl::getOpenCLDevices. And I use the original OpenCV function cvtColor(), it works and shows the gray image.

Dose anyone have the experience on OpenCV, OepnCL with raspberry Pi2?

Sorry for my poor English. THX.