@@ -72,26 +72,24 @@ FrameworkReturnCode SolARDescriptorMatcherKNNOpencv::match(SRef<DescriptorBuffer
7272 // since it is an openCV implementation we need to convert back the descriptors from SolAR to Opencv
7373 uint32_t type_conversion= SolAROpenCVHelper::deduceOpenDescriptorCVType (desc1->getDescriptorDataType ());
7474
75- cv::Mat cvDescriptor1 (desc1->getNbDescriptors (), desc1->getNbElements (), type_conversion);
76- cvDescriptor1.data =(uchar*)desc1->data ();
77-
78- cv::Mat cvDescriptor2 (desc2->getNbDescriptors (), desc2->getNbElements (), type_conversion);
79- cvDescriptor2.data =(uchar*)desc2->data ();
75+ cv::Mat cvDescriptor1 (desc1->getNbDescriptors (), desc1->getNbElements (), type_conversion, (uchar*)desc1->data ());
76+ cv::Mat cvDescriptor2 (desc2->getNbDescriptors (), desc2->getNbElements (), type_conversion, (uchar*)desc2->data ());
8077
78+ cv::Mat cvDescriptor1Float, cvDescriptor2Float;
8179 if (desc1->getDescriptorDataType () != DescriptorDataType::TYPE_32F)
82- cvDescriptor1.convertTo (cvDescriptor1 , CV_32F);
80+ cvDescriptor1.convertTo (cvDescriptor1Float , CV_32F);
8381 if (desc2->getDescriptorDataType () != DescriptorDataType::TYPE_32F)
84- cvDescriptor2.convertTo (cvDescriptor2 , CV_32F);
82+ cvDescriptor2.convertTo (cvDescriptor2Float , CV_32F);
8583
8684 std::vector< std::vector<cv::DMatch> > nn_matches;
8785
8886#ifdef WITHCUDA
8987 cv::cuda::GpuMat cvDescriptor1Gpu, cvDescriptor2Gpu;
90- cvDescriptor1Gpu.upload (cvDescriptor1 );
91- cvDescriptor2Gpu.upload (cvDescriptor2 );
88+ cvDescriptor1Gpu.upload (cvDescriptor1Float );
89+ cvDescriptor2Gpu.upload (cvDescriptor2Float );
9290 m_matcher->knnMatch (cvDescriptor1Gpu, cvDescriptor2Gpu, nn_matches, 2 );
9391#else
94- m_matcher->knnMatch (cvDescriptor1, cvDescriptor2 , nn_matches, 2 );
92+ m_matcher->knnMatch (cvDescriptor1Float, cvDescriptor2Float , nn_matches, 2 );
9593#endif // WITHCUDA
9694 std::map<uint32_t , std::map<uint32_t , float >> matches21;
9795 for (unsigned i = 0 ; i < nn_matches.size (); i++) {
0 commit comments