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
opencv flann库是否支持整数数据?_Opencv - Fatal编程技术网

opencv flann库是否支持整数数据?

opencv flann库是否支持整数数据?,opencv,Opencv,嗨,我正在尝试对整数数据进行最近邻查询。 cv::flann似乎不支持这一点。这是真的吗?不,FLANN仅用于浮点描述符。尽管OpenCV的匹配器和描述符的文档记录很差,但必须小心使用 有更详细的解释,但基本上描述符和匹配器只处理特定类型的数据,这一点必须得到尊重。我在这里提供了前面提到的页面的摘录,以供参考: 描述符: 浮动描述符:筛选、浏览 uchar描述符:ORB简介 匹配者: 对于浮点描述符:基于法兰的BruteForce BruteForce-L1 对于uchar描述符:BruteFo

嗨,我正在尝试对整数数据进行最近邻查询。
cv::flann似乎不支持这一点。这是真的吗?

不,FLANN仅用于浮点描述符。尽管OpenCV的匹配器和描述符的文档记录很差,但必须小心使用

有更详细的解释,但基本上描述符和匹配器只处理特定类型的数据,这一点必须得到尊重。我在这里提供了前面提到的页面的摘录,以供参考:

描述符:
浮动描述符:筛选、浏览
uchar描述符:ORB简介

匹配者:
对于浮点描述符:基于法兰的BruteForce BruteForce-L1
对于uchar描述符:BruteForce-Hamming BruteForce-HammingLUT


是的,可以对整数数据使用FLANN最近邻搜索。您需要对整数使用距离度量。一些距离度量是模板,根据数据类型进行参数化(如下例),其他度量是硬编码类型(例如
HammingLUT
has
unsigned char
元素类型和
int
结果(距离)类型)。您还可以实现自己的距离测量,有关详细信息,请参见

示例-使用
无符号字符
数据的代码引用:

// we use euclidean distances on unsigned chars:
typedef cv::flann::L2<unsigned char> Distance_U8;
cv::flann::GenericIndex< Distance_U8 > * m_flann;

// ...
// we have 3d features
cv::Mat features( features_count, 3, CV_8UC1 );

// ... fill the features matrix ...

// ... build the index ...
m_flann = new cv::flann::GenericIndex< Distance_U8 > (features, params);

// ... 

// how many neighbours per query?
in knn = 5;
// search params - see documentation
cvflann::SearchParams params;

// prepare the matrices
// query data - unsigned chars, 3d (like features)
cv::Mat input_1( n_pixels, 3, CV_8UC1 ),
        // indices into features array - integers
        indices_1( n_pixels, knn, CV_32S ),
        // distances - floats (even with integer data distances are floats)
        dists_1( n_pixels, knn, CV_32F );

m_flann->knnSearch( input_1, indices_1, dists_1, 1, params);
//我们在无符号字符上使用欧几里德距离:
typedef cv::flann::L2距离_U8;
cv::flann::GenericIndex*m\u flann;
// ...
//我们有3d功能
cv::垫特征(特征数量,3,cv 8UC1);
// ... 填写特征矩阵。。。
// ... 建立索引。。。
m_flann=新cv::flann::GenericIndex(特征、参数);
// ... 
//每个查询有多少邻居?
单位:knn=5;
//搜索参数-请参阅文档
cvflann::SearchParams params;
//准备矩阵
//查询数据-未签名字符,3d(类似特征)
cv::Mat输入_1(n_像素,3,cv_8UC1),
//索引到特征数组-整数
索引_1(n_像素,knn,CV_32S),
//距离-浮动(即使使用整数数据,距离也是浮动)
dists_1(n_像素,knn,CV_32F);
m_flann->knnSearch(输入_1,索引_1,距离_1,1,参数);

Hi@artm-此代码示例取自何处?ip是开源的吗?谢谢,谢谢!我只是想找一个这样的例子。那个项目混合使用了Qt和OpenCV,学习起来可能有点混乱,但它直到2012年10月才开始工作(在LinuxMint和MacOSX上测试):-)