将以下的五个圆的标识物贴在物体上,对物体进行定位和位姿确定
#include <iostream>
// 载入OpenCV头文件
#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <opencv2/legacy/compat.hpp>
#include <vector>
using namespace std;
using namespace cv;
//vector<pair<int,int> >centers;
vector<Point2f> centers;
vector<double> longAxisCVec;
struct EllipsePara
{
CvPoint m_Pt;
CvSize m_size;
float m_angle;
};
vector<EllipsePara> Oval;
//Some defines we left out of the book
//void f(
// IplImage* src,
// IplImage* dst
// )
//{
// CvMemStorage* storage = cvCreateMemStorage(0);
// CvSeq* comp = NULL;
//
// cvPyrSegmentation( src, dst, storage, &comp, 4, 200, 50 );
// int n_comp = comp->total;
//
// for( int i=0; i<n_comp; i++ ) {
// CvConnectedComp* cc = (CvConnectedComp*) cvGetSeqElem( comp, i );
// // do_something_with( cc );
// }
// cvReleaseMemStorage( &storage );
//}
int main(int argc, char** argv)
{
cvNamedWindow("Example_pre", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example_post", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example", CV_WINDOW_AUTOSIZE);
const char* filename = "caise6.jpg";
IplImage* src= cvLoadImage(filename, 1);
IplImage* ddd = cvCreateImage( cvGetSize(src), src->depth, src->nChannels);
cvCopy(src,ddd);
/*cvZero(ddd);*/
if(!src) { printf("Couldn't seem to Open %s, sorry\n",argv[1]); return -1;}
cvShowImage( "Example_pre", src);
//IplImage* dst = cvCreateImage( cvGetSize(src), src->depth, src->nChannels);
//IplImage* dst = cvCreateImage( cvSize( src->width*2, src->height*2 ), src->depth, src->nChannels);//用于缩放图像
/*f( src, dst);*/
IplImage* dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);//创建目标图像
cvCvtColor(src,dst,CV_BGR2GRAY);
cvSmooth(dst,dst,CV_GAUSSIAN,3,0,0,0);//模糊处理
cvThreshold( dst, dst, 100, 255, CV_THRESH_BINARY );//二值化