C++プログラムの問題。。
テンプレートマッチングというプログラムをやってますが、テンプレート画像にボックスカウンティング処理を行い、フラクタル次元を求めようという進み方で行こうと思って、プログラムを作ってみました。でもコンパイルするとエラーが出てきちゃいました。
int main(int argc, char* argv[])
{
int x,y;
int r,g,b;
int wh=0,BC2=0,BC3=0,BC4=0,BC5=0,BC6=0;
float p;
char* filename = argc == 2 ? argv[1] : (char*) "apple.bmp";
if((src = cvLoadImage(filename,1)) == 0)
return -1;
IplImage *grayimg = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);
IplImage *edgeimg = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);
IplImage *img = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,3);
IplImage *his = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);
cvCvtColor(src,grayimg,CV_BGR2GRAY);
cvEqualizeHist(grayimg,his);
cvCanny (his,edgeimg,50,200,3);
cvCvtColor (edgeimg,img,CV_GRAY2BGR);
for(y=0;y< img->height;y++){
for(x=0;x< img->width ;x++){
getpixel(img,x,y,&r,&g,&b);
if(r == white){
wh++;
}
}
}
p = (wh*100)/ (img->height * img->width);
printf("height = %d width = %d\n",img->height,img->width);
printf("white pixel = %d(%3.2f %%)\n",wh, p);
(ここで x,y=1 x,y=2 x,y=4 x,y=5 と x,y=6 ももちろん入れてます)
printf("log10(%d)/log10(2)=%1.4f\n",BC2,(log10(BC2)/log10 (2)));
printf("log10(%d)/log10(3)=%1.4f\n",BC3,(log10(BC3)/log10 (3)));
(ここでlog10(6)までの続きがあります)
printf("((log10(%d)-log10(%d))/(log10(2)-log10(3)))=%1.4f\n",BC2,BC3,(log10(BC2)-log10(BC3))/(log10(2)-log10(3)));
(ここでlog10(6)までの続きがあります)
double fd,fd23,fd34,fd24,fd25,fd35,fd45,fd26,fd36,fd46,fd56;
fd23 = -(log10(BC2)-log10(BC3))/(log10(2)-log10(3));
(ここでlog10(6)までの続きがあります)
fd = ((fd23+fd34+fd24+fd25+fd35+fd45+fd26+fd36+fd46+fd56)/10);
printf("フラクタル次元は%1.4fです\n",fd);
。
。
ここからはopenCVの関数が使ってます。
。
。
プログラムはこのようなんですが、コンパイルするとこのエラーが出てきました。
jikken2.cpp(528) : error C2668: 'log10' : ambiguous call to overloaded function
c:\program files\microsoft visual studio 8\vc\include\math.h(569): could be 'long double log10(long double)'
c:\program files\microsoft visual studio 8\vc\include\math.h(521): or 'float log10(float)'
c:\program files\microsoft visual studio 8\vc\include\math.h(122): or 'double log10(double)'
while trying to match the argument list '(int)'
誰かお分かりになる方々をぜひぜひお願いします。
お礼
ありがとうございました! 解決しました!