C++ 如何为所有图像制作相同大小的描述符
有谁能告诉我如何使描述符的大小固定吗?因为我们可能从不同的图像中得到不同数量的描述符 例如 如果我有一张450*550的图像,我在上面应用了surf功能,surf从中提取关键点,然后从中提取描述符,例如,它从450*550图像中提取10个关键点描述符,然后它再次读取一张图像,其大小为750*880,所以surf从中提取关键点,然后提取描述符,例如,这次它从这幅图像中提取了20个描述符,现在我想做的是,无论图像大小如何,描述符的大小都应该相同,就像从两幅图像中提取10个描述符一样,因此,对于许多图像,它应该选择描述符的最小大小,并仅从所有图像中提取描述符,而保留其他图像,或者我定义大小,它忽略描述符小于或大于该大小的图像C++ 如何为所有图像制作相同大小的描述符,c++,opencv,computer-vision,svm,surf,C++,Opencv,Computer Vision,Svm,Surf,有谁能告诉我如何使描述符的大小固定吗?因为我们可能从不同的图像中得到不同数量的描述符 例如 如果我有一张450*550的图像,我在上面应用了surf功能,surf从中提取关键点,然后从中提取描述符,例如,它从450*550图像中提取10个关键点描述符,然后它再次读取一张图像,其大小为750*880,所以surf从中提取关键点,然后提取描述符,例如,这次它从这幅图像中提取了20个描述符,现在我想做的是,无论图像大小如何,描述符的大小都应该相同,就像从两幅图像中提取10个描述符一样,因此,对于许多图
extractor.compute( tmplate_img, keypoints, descriptors);
my_img=descriptors.reshape(1,1);
当我在循环中运行时,我想为所有图像生成相同大小的描述符,并且描述符的大小对于获得更好的结果更好,描述符是MAT
谢谢您可以使用以下代码保留响应最大的前M个关键点:
bool compareFunction(KeyPoint p1, KeyPoint p2) {return p1.response>p2.response;}
//The function retains the stongest M keypoints in kp
void RetainBestKeypoints(vector<KeyPoint> &kp, int M)
{
vector<KeyPoint> sortedkp;
sort(kp.begin(),kp.end(),compareFunction);
if (kp.size()>M)
kp.erase(kp.begin()+M,kp.end());
}
你用的是哪种检测器和描述符?@GiLevi-Sift和Surf-both这是一个非常糟糕的问题。您需要从描述您所做的工作、您正在使用的OpenCV函数/类以及您试图以简洁的方式实现的内容开始。不要假设其他人正在处理完全相同的问题。当你写问题时,请考虑一下读者。@Bee我尽量让它更好我想保持所有图像描述符的大小相同,并保存所有图像的大小,我不想一张图像有10个描述符,第二张图像有15个描述符,第三张图像有20个描述符,依此类推,我希望所有图像的描述符大小相同,如果我将最大/最大描述符设置为固定大小,例如30,并且我将所有其他图像的描述符设置为最大20,那么会产生相同的问题,你是指描述符向量的维数吗?我不知道你的意思。我想我理解你的问题。假设您希望从每个图像中提取10个描述符。从图像中提取超过10个关键点,但使用我上面粘贴的代码仅保留前10个关键点,然后提取这些关键点的描述符。我可以问一下,为什么要将两个关键点作为参数吗?在比较功能中?我是根据他们的反应来比较的。我保留了最大响应的m关键点,并丢弃了所有其他关键点。