0
私は文字「U」の2つの画像を持っています。それらの類似性をcvMatchTemplate関数を使って比較しました。次に、cvMinMaxLoc 関数を使用して、ピクセルとそのそれぞれの位置の最大値と最小値を求めました。 しかし、私はそれらを比較すると、文字 "Q"で最大値を返し、最大値と最小値は同じです。私はここで何が問題なのか理解していませんか? 画像のサイズは同じです。 私のコードは次のとおりです。cvMatchTemplateで結果を取得できませんか?
IplImage* gray1[1];
IplImage* grayThresh1[1];
へ:
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
int main()
{
char text[]={'Q','U'};
IplImage * tmp[2];
tmp[0]=cvLoadImage("D:\\Standards\\u.bmp",1);
tmp[1]=cvLoadImage("D:\\Standards\\q.bmp",1);
IplImage* src;
IplImage* dst;
IplImage* gray;
IplImage* grayThresh;
IplImage* gray1[1];
IplImage* grayThresh1[1];
int threshold = 120, maxValue = 255;
int thresholdType = CV_THRESH_BINARY;
src = cvLoadImage("D:\\OU.bmp", 1);
gray = cvCreateImage(cvSize(src->width,src->height), IPL_DEPTH_8U, 1);
cvCvtColor(src, gray, CV_BGR2GRAY);
grayThresh = cvCloneImage(gray);
cvThreshold(gray, grayThresh, threshold, maxValue, thresholdType);
for(int i=0;i<=1;i++){
gray1[i] = cvCreateImage(cvSize(tmp[i]->width,tmp[i]->height), IPL_DEPTH_8U, 1);
cvCvtColor(tmp[i], gray1[i], CV_BGR2GRAY);
grayThresh1[i] = cvCloneImage(gray1[i]);
cvThreshold(gray1[i], grayThresh1[i], threshold, maxValue, thresholdType);
}
CvPoint minloc, maxloc;
double minval, maxval;
int iwidth = grayThresh1[0]->width - grayThresh->width + 1;
int iheight =grayThresh1[0]->height - grayThresh->height + 1;
IplImage *res=cvCreateImage(cvSize(iwidth,iheight),32,1);
for(int i=0;i<=1;i++){
cvMatchTemplate(grayThresh,grayThresh1[i],res,CV_TM_CCORR_NORMED);
cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0);
cout<<text[i]<<" maxval="<<maxval<<" minval="<<minval<<endl;}
cvDestroyWindow("grayThresh");
cvDestroyWindow("src");
cvDestroyWindow("dst");
cvDestroyWindow("grayThresh1");
cvReleaseImage(&src);
cvReleaseImage(&grayThresh);
cvReleaseImage(&dst);
for(int i=0;i<=1;i++)
cvReleaseImage(&grayThresh1[i]);
return 0;
}
あなたのコードの書式設定を修正してください - それは(デバッグすることは難しいと)読むためにはかなり難しいです現在の形で –