Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Opencv SIFT检测到的关键点数量非常少_Opencv_Sift_Image Stitching - Fatal编程技术网

Opencv SIFT检测到的关键点数量非常少

Opencv SIFT检测到的关键点数量非常少,opencv,sift,image-stitching,Opencv,Sift,Image Stitching,我有一个图像拼接代码和SIFT被用来检测关键点。当我使用从互联网下载的图像时,关键点的数量非常好。但是当我使用相机拍摄的图像时,关键点的数量非常糟糕。这是我用来检测关键点的代码。有什么问题吗 > Ptr<SIFT> detector = SIFT::create(0,3,-1,5,2.6); //0,3,-1,5,0.6 > std::vector <KeyPoint> kp1, kp2; > Mat descriptors1, descr

我有一个图像拼接代码和SIFT被用来检测关键点。当我使用从互联网下载的图像时,关键点的数量非常好。但是当我使用相机拍摄的图像时,关键点的数量非常糟糕。这是我用来检测关键点的代码。有什么问题吗

> Ptr<SIFT> detector = SIFT::create(0,3,-1,5,2.6); //0,3,-1,5,0.6   
> std::vector <KeyPoint> kp1, kp2;    
> Mat descriptors1, descriptors2;
> detector -> detectAndCompute (imageA, noArray(), kp1, descriptors1);    
> detector -> detectAndCompute (imageB, noArray(),kp2, descriptors2);    
> //Ptr<DescriptorMatcher> matcher = BFMatcher::create();    
> Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);   
Ptr检测器=SIFT::create(0,3,-1,5,2.6)//0,3,-1,5,0.6 >标准::载体kp1,kp2; >Mat描述符1,描述符2; >检测器->检测和计算(imageA,noArray(),kp1,描述符1); >检测器->检测和计算(imageB,noArray(),kp2,描述符2); >//Ptr matcher=BFMatcher::create(); >Ptr matcher=DescriptorMatcher::create(DescriptorMatcher::flannbase);
您可以尝试更改sift参数。Probaby您可以调整功能评分阈值。其他可能的方法:正常化图像(将最小值缩放为0,将最大值缩放为255)或使用直方图均衡化。你能展示一些你的图片吗?关键点检测/描述仅在纹理场景中有效。为什么要修改
SIFT::create()
的默认值。第三个值
Contrast threshold=0.04
的值表示“阈值越大,检测器产生的特征越少。”您将该值更改为-1。我甚至不知道负值是否有意义。首先,我会尝试使用默认值进行特征检测,可能会一个接一个地更改参数,以确定是否可以获得更好的结果。筛分非常均衡。