Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为所有图像制作相同大小的描述符_C++_Opencv_Computer Vision_Svm_Surf - Fatal编程技术网

C++ 如何为所有图像制作相同大小的描述符

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个描述符一样,因此,对于许多图

有谁能告诉我如何使描述符的大小固定吗?因为我们可能从不同的图像中得到不同数量的描述符 例如 如果我有一张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关键点,并丢弃了所有其他关键点。