Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Ios OpenCV描述符返回空_Ios_Opencv_Object Detection_Orb - Fatal编程技术网

Ios OpenCV描述符返回空

Ios OpenCV描述符返回空,ios,opencv,object-detection,orb,Ios,Opencv,Object Detection,Orb,我正在尝试在iOS上使用OpenCV进行对象检测。我正在使用 这是我的密码: Mat src = imread("src.jpg"); Mat templ = imread("logo.jpg"); Mat src_gray; cvtColor(src, src_gray, CV_BGR2GRAY); Mat templ_gray; cvtColor(templ, templ_gray, CV_BGR2GRAY); int minHessian = 500; OrbFeatureDete

我正在尝试在iOS上使用OpenCV进行对象检测。我正在使用

这是我的密码:

Mat src = imread("src.jpg");
Mat templ = imread("logo.jpg");

Mat src_gray;
cvtColor(src, src_gray, CV_BGR2GRAY);

Mat templ_gray;
cvtColor(templ, templ_gray, CV_BGR2GRAY);

int minHessian = 500;

OrbFeatureDetector detector(minHessian);

std::vector<KeyPoint> keypoints_1, keypoints_2;

detector.detect(src_gray, keypoints_1);
detector.detect(templ_gray, keypoints_2);

OrbDescriptorExtractor extractor;

Mat descriptors_1, descriptors_2;

extractor.compute(src_gray, keypoints_1, descriptors_1);
extractor.compute(templ_gray, keypoints_2, descriptors_2);
Mat src=imread(“src.jpg”);
Mat templ=imread(“logo.jpg”);
Mat src_gray;
CVT颜色(src、src_灰色、CV_BGR2灰色);
Mat templ_gray;
CVT颜色(模板、模板灰、CV灰);
int minHessian=500;
OrbFeatureDetector检测器(minHessian);
std::向量关键点1,关键点2;
检测器。检测(src_灰色,关键点_1);
检测器。检测(模板灰,关键点2);
ORB牵引器;
Mat描述符_1,描述符_2;
compute(src_gray,keypoints_1,描述符_1);
计算(模板灰,关键点2,描述符2);
问题出在
extractor.compute(src_gray,keypoints_1,descriptor_1)行上使
描述符\u 1
始终为空

src
templ
不为空

有什么想法吗


谢谢

首先,我认为如果你想使用特征检测器和描述符,你必须告诉自己它们是如何工作的。 你可以看到这个主题,“佩内洛普”的答案比我解释的更好:

在第一步之后,我认为您应该更好地了解ORB检测器/描述符是如何工作的(如果您真的想使用它),它的参数是什么,等等。为此,您可以查看opencv文档和ORB论文:

我之所以这样说,是因为您在ORB检测器上设置了“minHessian”参数,而“minHessian”实际上是来自SURF检测器的参数

无论如何,代码的问题并不是这样。尝试加载您的图像,如下面的示例所示:

Mat src = imread("src.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat templ = imread("logo.jpg", CV_LOAD_IMAGE_GRAYSCALE );
然后检测关键点:

detector.detect(src, keypoints_1);
detector.detect(templ, keypoints_2);
现在检查关键点_1和关键点_2是否为空。如果他们正在进行描述符提取!应该行得通


希望这有帮助

关键点_1是否为空?是的,
关键点_1
为空。那么您无法计算描述符,因此描述符_1为空。好吧,如果有垫子,为什么
描述符_1
为空?哪个垫子不是空的?如果您的意思是输入图像不是空的,那么可能会发生这种情况,因为探测器没有找到任何关键点。可能是因为其中没有显著点,或者检测器的参数(例如minHessian)不合适。