convert bitset descriptor -> cv::Mat

bitset转opencv cv::Mat 
注意
(1)Mat 的列为32列,类型为uchar
(2)BRIEF::bitset 的长度为256
(3)每8个构成一个uchar

vector<BRIEF::bitset> temp_brief_descriptors;
extractor(image, keypoints, temp_brief_descriptors);
brief_descriptors_mat=Mat::zeros(brief_descriptors.size(),32,CV_8UC1);
int row=0;
 for(iter = temp_brief_descriptors.begin(); iter!=temp_brief_descriptors.end();iter++)
 {
     BRIEF::bitset bits=*iter;
     for (int i = 0; i < 32; i += 8)
     {
         char ch;
         for (int j = 0; j < 8; ++j)
         {
             if (bits.test(i + j))	// 第i + j位为1
                 ch |= (1 << j);
             else
                 ch &= ~(1 << j);
         }
         brief_descriptors_mat.at<uchar>(row, i)=(uchar)ch;

     }
     row++;
 }
发布了153 篇原创文章 · 获赞 169 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/ktigerhero3/article/details/104673574