目前我正在使用opencv库开发模板匹配的OCR算法。我逐个像素地比较,到现在为止我已经取得了很好的效果。当我想要匹配的区域大小不同时,就会出现问题。
Ex: Template size = 70x100 while ROI = 140x200.
我是否可以使用任何功能来调整所需的大小并最终得到相同数量的行和列?
由于 罗伯特格雷奇
答案 0 :(得分:0)
通常一个人制作一个图像比例金字塔,然后只扫描所有比例尺的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();
}
然后您需要将结果后期处理回原始比例,这对于一个框来说很简单,但是如果您有热图/响应图/概率图,那么重新调整它的大小可能有点hacky