核心转储 - 32S、32F、8U

Core dump - 32S, 32F, 8U

我正在尝试 运行 这个代码序列:

DescriptorMatcher * matcher = new BFMatcher(NORM_HAMMING);
vector<DMatch> matches;
matcher -> match(descriptorsImage1, descriptorsImage2, matches);

导致此错误:

OpenCV Error: Assertion failed ((type == CV_8U && dtype == CV_32S) || dtype == CV_32F) in batchDistance, file /home/.../OpenCV/opencv-2.4.10/modules/core/src/stat.cpp, line 2480
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/.../OpenCV/opencv-2.4.10/modules/core/src/stat.cpp:2480: error: (-215) (type == CV_8U && dtype == CV_32S) || dtype == CV_32F in function batchDistance

Aborted (core dumped)

有人以前看过这个吗?

正如评论中提到的那样,您可能会误用描述符的类型及其适当的规范类型。

正如 OpenCV 的文档所说:

BFMatcher::BFMatcher(int normType=NORM_L2, bool crossCheck=false )

normTypeNORM_L1NORM_L2NORM_HAMMINGNORM_HAMMING2 之一。 L1L2 规范是 SIFTSURF 描述符的首选,NORM_HAMMING 应该与 ORBBRIEF 一起使用,当 WTA_K==34 时,NORM_HAMMING2 应与 ORB 一起使用(参见 ORB::ORB 构造函数说明)。