openCV识别定位五个圆的标识物进行定位和位姿确定

这篇博客介绍了如何使用OpenCV库对贴有五个圆标识的物体进行定位和位姿确定。通过图像处理步骤,如二值化、边缘检测和轮廓识别,找到这些圆,并使用椭圆拟合来确定它们的中心和大小。然后,通过计算距离矩阵,识别出中心点及其周围的四个点,对这些点进行排序和标记,最终在图像上显示出来。
摘要由CSDN通过智能技术生成

将以下的五个圆的标识物贴在物体上,对物体进行定位和位姿确定




#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 );//二值化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值