关于使用opencv,读取方形物体的坐标,计算偏移角度和中心的偏移量,该如何解决

关于使用opencv,读取方形物体的坐标,计算偏移角度和中心的偏移量
我想用opencv来读取图片中方形物体的偏移量,和其中点与图片中点的距离
我首先是把图片转为灰度图片,然后进行二值化,接着进行Sobel边缘检测,想要查找最小外接矩形的轮廓

CFileDialog dlg(TRUE,_T("*.bmp"),"",OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
"image files(*.bmp;*.jpg)|*.bmp;*.jpg|ALL Files(*.*)|*.*||",NULL);
char title[] = {"Open Image"};
dlg.m_ofn.lpstrTitle = title;
if(dlg.DoModal() == IDOK)
{
CString path=dlg.GetPathName();
IplImage* src = cvvLoadImage(path);
IplImage* sobelImg = NULL;
IplImage* dst=NULL;
IplImage* bw=NULL;


CvMemStorage * storage = cvCreateMemStorage(0);
CvSeq * contour = 0;
int mode = CV_RETR_EXTERNAL;



IplImage* GrayImage = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
cvCvtColor(src,GrayImage,CV_BGR2GRAY);

cvThreshold( GrayImage, GrayImage, 300, 255, CV_THRESH_OTSU );
sobelImg=cvCreateImage(cvGetSize(GrayImage),IPL_DEPTH_8U,1);
cvSobel(GrayImage,sobelImg,0,1,3);

cvFindContours( sobelImg, storage, &contour, sizeof(CvContour), 
mode, CV_CHAIN_APPROX_SIMPLE ,cvPoint(0,0));

for(;contour!=0;contour=contour->h_next)

{ CvBox2D rect=cvMinAreaRect2(contour,storage);

CvPoint2D32f rect_pts0[4];
cvBoxPoints(rect, rect_pts0);

//因为cvPolyLine要求点集的输入类型是CvPoint**
//所以要把 CvPoint2D32f 型的 rect_pts0 转换为 CvPoint 型的 rect_pts
//并赋予一个对应的指针 *pt
int npts = 4,k=0;
int aaa=0,bbb=0;
CvPoint rect_pts[4], *pt = rect_pts;

printf("连通区域最小外接矩形顶点坐标分别为:\n");
for (int i=0; i<4; i++)
{
rect_pts[i]= cvPointFrom32f(rect_pts0[i]);
printf("%d %d\n",rect_pts[i].x,rect_pts[i].y);
aaa=(int)sqrt((pow((rect_pts[0].x-rect_pts[1].x),2)+pow((rect_pts[0].y-rect_pts[1].y),2)));
bbb=(int)sqrt((pow((rect_pts[0].x-rect_pts[3].x),2)+pow((rect_pts[0].y-rect_pts[3].y),2)));

if(aaa<bbb)
{
k=aaa;
aaa=bbb;
bbb=k;
}

}
printf("最小外接矩形的长为:%d,宽为:%d。\n\n",aaa,bbb);

//chang=rect_pts[0]-rect_pts[3];
//kuan=rect_pts[0]-rect_pts[1];
//printf("最小外接矩形的长为:%d,宽为:%d\n",chang,kuan);*/

//画出Box
cvPolyLine(dst, &pt, &npts, 1, 1, CV_RGB(255,0,0), 1);
//}

cvNamedWindow("huidu",1);
cvShowImage("huidu",sobelImg);

cvNamedWindow("image5",1);
cvShowImage("image5",dst);
//

//cvWaitKey(0);
cvDestroyWindow("image5");
cvReleaseMemStorage(&storage);
cvReleaseImage(&dst);
}
请问各位高手,我上面的代码有没有问题,因为得不到想要的结果

------解决方案--------------------
C:\Program Files\OpenCV\samples\cpp\squares.cpp

------解决方案--------------------
http://blog.csdn.net/fengbingchun/article/details/7069506