First time here? Check out the FAQ!
Good Day!
The program works(OpenCV 3), but uses only the CPU. How to use GPU(The system determines the graphics card)?
ocl::setUseOpenCL(true); if (!ocl::haveOpenCL()) { cout << "OpenCL is not available..." << endl; //return; } cv::ocl::Context context; if (!context.create(cv::ocl::Device::TYPE_GPU)) { cout << "Failed creating the context..." << endl; //return; } cout << context.ndevices() << " GPU devices are detected." << endl; //This bit provides an overview of the OpenCL devices you have in your computer for (int i = 0; i < context.ndevices(); i++) { int tmp = 0; if (cv::ocl::useOpenCL() == true) tmp = 1; cv::ocl::Device device = context.device(i); cout << "name: " << device.name() << endl; cout << "available: " << device.available() << endl; cout << "imageSupport: " << device.imageSupport() << endl; cout << "OpenCL_C_Version: " << device.OpenCL_C_Version() << endl; cout << "Use OpenCL: " << tmp << endl; cout << endl; } //UMat img1 = imread("F:\\Project\\Data\\X.jpg", IMREAD_GRAYSCALE).getUMat(ACCESS_READ); Mat img1 = imread("F:\\Project\\Data\\X.jpg", IMREAD_GRAYSCALE); float fTimeStartAll = clock() / (float)CLOCKS_PER_SEC; vector<double> desMethCmp; Ptr<Feature2D> b = BRISK::create(); Ptr<DescriptorMatcher> descriptorMatcher; // Match between img1 and img2 vector<DMatch> matches; // keypoint for img1 and img2 vector<KeyPoint> keyImg1, keyImg2; // Descriptor for img1 and img2 Mat descImg1, descImg2; // We can detect keypoint with detect method b->detect(img1, keyImg1, Mat()); // and compute their descriptors with method compute b->compute(img1, keyImg1, descImg1); int tmp = 0; sprintf(pathCatalog, "F:\\Project\\"); numberPage = 509; tmp = 0; int bestList = 0; double bestCurrent = 10000000; for (int j = 1; j < numberPage; j++) { tmp++; char pathFile[256]; sprintf(pathFile, "%s%d.mat", pathCatalog, j); LoadMatBinary(pathFile, descImg2); // Match method loop if (b->descriptorType() == CV_32F || b->defaultNorm() <= NORM_L2SQR) { printf("It's strange. You should use Hamming distance only for a binary descriptor"); }; UMat UdescImg1 = descImg1.getUMat(cv::ACCESS_READ, cv::USAGE_ALLOCATE_DEVICE_MEMORY); UMat UdescImg2 = descImg2.getUMat(cv::ACCESS_READ, cv::USAGE_ALLOCATE_DEVICE_MEMORY); descriptorMatcher = cv::DescriptorMatcher::create("BruteForce-Hamming"); descriptorMatcher->match(UdescImg1, UdescImg2, matches, noArray());