2014-05-23 12 views
0

지금 저는 opencv 라이브러리를 사용하여 템플릿 매칭 (Template Matching) 기능을 갖춘 OCR 알고리즘을 연구 중입니다. 나는 픽셀 단위로 픽셀을 비교하고 있는데, 지금까지는 좋은 결과를 얻었습니다. 문제는 내가 원하는 영역이 다른 크기 일 때입니다.다양한 크기의 템플릿 매칭

Ex: Template size = 70x100 while ROI = 140x200. 

같은 크기의 행과 열로 필요한 크기를 조정하고 끝내기 위해 사용할 수있는 기능이 있습니까?

감사 로버트 GRECH

+0

템플릿 일치는 크기 및 회전 불변량이라고 생각했습니다. – GPPK

+0

실제로 축척 및 회전이 영향을줍니다. 5x5 행렬에 3x3 행렬을 상상해보십시오. 결과는 달라집니다 – Robert8255

+0

당신이 원한다면 cv :: resize를 사용하여 ROI의 내용을 확장 할 수 있습니다. –

답변

0

는 일반적으로 하나의 이미지 스케일 피라미드를 만드는 모든 스케일에서 OpenCV HOGDescriptor 같이 즉 걸쳐 다음에만 70x100 창문 검색 :

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(); 

} 

당신이 다음 포스트해야 결과를 원래의 비율로 다시 처리하십시오. 이것은 상자로 간단하지만 히트 맵/응답 맵/확률 맵이있는 경우 크기를 다시 조정하면 다소 해킹 될 수 있습니다.

관련 문제