KdTree是一种非常好用的搜索算法。特别是在处理高维度数据时,仅通过KdTree进行近邻搜索,就能获取到不错的模糊搜索效果。
对于OpenCV这样的老牌优秀图像库,自然是提供了KdTree函数的。下面我们来通过一个小例子简单介绍下OpenCV中KdTree的用法。
这个例子的目的是输入一张图片,然后我们根据图片的内容,将其转换为ascii字符的形式输出。这就要求每一个ascii字符要建立一个图素,比如8x8像素的图素,或是16x16、32x32像素的图素等。我们通过OpenCV将ascii字符打印到一个i乘j的小图片上。其中i和j分别为图素的宽和高,一般i和j是相同的,比如都是8、16、32等。然后将该小图片转换为一维向量。最后将所有的图素一维向量组成一个矩阵,矩阵大小是m x n,m是行数即样本数,也即图素数,也即ascii字符数;相应的n为图素的像素数,也就是前文提到的i乘j。这个矩阵将会输入到KdTree中用来建立KdTree。建立好后,用户即可以通过该KdTree进行搜索。
先看一段代码。如下:
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
#include <opencv2/flann.hpp>
cv::Mat char2Mat(uchar c, int width = 32, int height = 32, float scale = 1.0f, int fontFace = cv::FONT_HERSHEY_DUPLEX)
{
cv::Size elemSize(width, height);
cv::Mat elem(elemSize, CV_8UC1, cv::Scalar(0));
int baseline = 0;
std::string text;
text += c;
cv::Size textSize = cv::getTextSize(text, fontFace, scale, 1, &baseline);

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



