我想实现OCR功能。
我收集了一些样本,我想使用K-Nearest来实现它。
所以,我使用下面的代码加载数据并初始化KNearest
KNearest knn = new KNearest;
Mat mData, mClass;
for (int i = 0; i <= 9; ++i)
{
Mat mImage = imread( FILENAME ); // the filename format is '%d.bmp', presenting a 15x15 image
Mat mFloat;
if (mImage.empty()) break; // if the file doesn't exist
mImage.convertTo(mFloat, CV_32FC1);
mData.push_back(mFloat.reshape(1, 1));
mClass.push_back( '0' + i );
}
knn->train(mData, mClass);
然后,我调用代码以找到最佳结果
for (vector<Mat>::iterator it = charset.begin(); it != charset.end(); ++it)
{
Mat mFloat;
it->convertTo(mFloat, CV_32FC1); // 'it' presents a 15x15 gray image
float result = knn->find_nearest(mFloat.reshape(1, 1), knn->get_max_k());
}
但是,我的应用程序在find_nearest崩溃了。
有人可以帮助我吗?
答案 0 :(得分:1)
我好像发现了问题...
我的示例图像是cvtColor转换后的灰色图像,但我的输入图像不是。
我添加
后cvtColor(mImage, mImage, COLOR_BGR2GRAY);
之间
if (mImage.empty()) break;
mImage.convertTo(mFloat, CV_32FC1);
find_nearest()返回一个值,我的应用程序没问题。