如何从opencv中的上下文获取设备列表

如何从opencv中的上下文获取设备列表,opencv,opencl,Opencv,Opencl,我正在使用opencv和opencl开发一个项目。现在,内核和缓冲区使用opencv指定的函数运行。出于某些原因,我希望使用OpenCL的本机函数,而不是opencv函数,以最少的更改次数。我有两个文件。在主文件中,我创建了上下文,并将其传递给函数到第二个文件。在第二个文件中,我需要构建并执行内核。如果我要使用OpenCV的函数,我可以使用已传递到第二个文件的上下文执行内核。但当我计划使用OpenCL的原生版本时,我需要对内核进行bild,为此我需要设备列表。我的问题是,有没有办法从opencv

我正在使用opencv和opencl开发一个项目。现在,内核和缓冲区使用opencv指定的函数运行。出于某些原因,我希望使用OpenCL的本机函数,而不是opencv函数,以最少的更改次数。我有两个文件。在主文件中,我创建了上下文,并将其传递给函数到第二个文件。在第二个文件中,我需要构建并执行内核。如果我要使用OpenCV的函数,我可以使用已传递到第二个文件的上下文执行内核。但当我计划使用OpenCL的原生版本时,我需要对内核进行bild,为此我需要设备列表。我的问题是,有没有办法从opencv创建的上下文中获取设备列表?或者,我如何在不从主文件传递信息的情况下获取设备列表

以下是主文件的片段:

  vector<ocl::Info> oclinfo;
  int devnums = ocl::getDevice(oclinfo);
  if( devnums < 1 )
    {
      std::cout << "no device found\n";
      return -1;
    }
  ocl::setBinpath("./");
  cv::ocl::Context* clCxt = ocl::Context::getContext();

ScanKernel( Mat& img,string kernelsrc,string kernelName,cv::ocl::Context* clCxt)

我需要有关获取clBuildProgram函数的设备列表的帮助。

您可以将
clGetContextInfo()
函数与
CL\u CONTEXT\u DEVICES
参数一起使用,以获取与上下文关联的设备列表。获得设备列表后,可以将其传递到
clBuildProgram()
以编译程序


请参阅此处的文档:

您使用的是哪个操作系统?
const char * source    = kernelsrc.c_str();
size_t sourceSize[]    = { strlen(source) };


cpProgram = clCreateProgramWithSource((cl_context)clCxt->oclContext(), 1, &source, sourceSize, &ciErr1);
if (ciErr1 != CL_SUCCESS) {
printf("Error in clCreateProgramWithSource, Line %u in file %s %d !!!\n\n", __LINE__, __FILE__,ciErr1);

}
else
{       printf("*** Got createprogramwithsource\n");


**ciErr1 =  clBuildProgram(cpProgram, NULL, NULL, NULL, NULL, NULL);** 
if (ciErr1 != CL_SUCCESS) {
        printf("Error in building, Line %u in file %s error NO: %d!!!\n\n", __LINE__, __FILE__,ciErr1);

    }