우선 제가 하고자 하는것은 OpenCV를 통해 200,200 까만 IplImage를 생성 후 해당 이미지에 cvCircle를 통해 반지름 50인 흰색 원을 그린 후 해당 이미지를 통해 반지름 50인 구의 부피를 계산하려 합니다.
제가 생각하기엔 흰색인 이미지 한 Pixel 라인에서 Intensity 값이 255인 부분만 뽑아서 Pixel 개수가 지름인 원의 넓이를 모두 더하면 구의 부피가 될거라 생각했지만 실제 공식에 대입하여 계산한 값과 너무 많은 차이가 발생합니다.
왜 그런지 예상조차 되지 않아 여기에 도움을 청해봅니다.
실제 계산 소스(Test.bmp가 200,200 의 까만색 이미지에 반지름 50,중심좌표 100,100의 하얀 원을 그린 이미지 입니다.)
IplImage *src_Img = cvLoadImage("D:\\Test.bmp",0);
int nRadius = 0;
double dData,dSize = 0;
std::vector<int> vector;
for(int i = 0;i<src_Img->height;i++){
for(int j =0;j<src_Img->widthStep;j++){
dData = (double)cvGetReal2D(src_Img,j,i);
if(dData == 255){
nRadius++;
}
else if(dData != 255 && j>src_Img->widthStep/2){
break;
}
}
if(nRadius != 0){
ListBox1->AddItem((UnicodeString)nRadius,NULL);
dSize += CalcSizeImage((double)nRadius);
nRadius = 0;
}
}
ShowMessage(dSize);
원 넓이 계산 함수.
double dRadius = dPixelData/2.0;
double dArea = dRadius * dRadius * M_PI;
return dArea;
실제 공식(M_PI 는 원주율)
double dSize = 4 / 3 * 50*50*50* M_PI;
ShowMessage(dSize);
공식으로 구한 구의 부피
392699.xxx
적분(?)으로 구한 구의 부피
522984.xxx
|