现在,我正在使用 opencv 库研究带有模板匹配的 OCR 算法。我正在逐个像素地比较,直到现在我已经获得了很好的结果。当我要匹配的区域大小不同时,问题就来了。
Ex: Template size = 70x100 while ROI = 140x200.
我可以使用任何函数来调整所需的大小并最终得到相同数量的行和列吗?
谢谢罗伯特·格雷奇
现在,我正在使用 opencv 库研究带有模板匹配的 OCR 算法。我正在逐个像素地比较,直到现在我已经获得了很好的结果。当我要匹配的区域大小不同时,问题就来了。
Ex: Template size = 70x100 while ROI = 140x200.
我可以使用任何函数来调整所需的大小并最终得到相同数量的行和列吗?
谢谢罗伯特·格雷奇
通常制作一个图像比例金字塔,然后只使用 70x100 窗口扫描所有比例,即在 opencv HOGDescriptor 中:
double scale = 1.;
double scale0 = 1.05;
int maxLevels = 64;
int nLevels;
Size templateSize(70,100);
cv::Mat testImage = cv::imread("test1.jpg");
vector<double> levelScale;
for( nLevels = 0; nLevels < maxLevels; nLevels++ )
{
levelScale.push_back(scale);
if( cvRound(testImage.cols/scale) < templateSize.width ||
cvRound(testImage.rows/scale) < templateSize.height ||
scale0 <= 1 )
break;
scale *= scale0;
}
nLevels = std::max(nLevels, 1);
levelScale.resize(nLevels);
int level;
for(level =0; level<nLevels; level++)
{
cv::Mat testAtScale;
Size sz(cvRound(testImage.cols/levelScale[level]),
cvRound(testImage.rows/levelScale[level]));
resize(testImage,testAtScale,sz);
//result = match(template,testAtScale);
//cv::imshow("sclale",testAtScale);
//cv::waitKey();
}
然后,您需要将结果后处理回原始比例,这很简单,但如果您有热图/响应图/概率图,那么重新调整它的大小可能有点麻烦。