《opencv椭圆检测识别并画出轮廓》由会员分享,可在线阅读,更多相关《opencv椭圆检测识别并画出轮廓(4页珍藏版)》请在金锄头文库上搜索。
1、百度文库 - 让每个人公平地提升自我*#include “stdafx.h“ #include “cv.h“ #include “highgui.h“using namespace cv;using namespace std; /标示符的可见范围CvPoint2D32f GetCPoint(IplImage* imageFg,int maxX); void FitEllipseBlob(IplImage* imageFg);int main( int argc, char* argv )IplImage* pImg; /声明 IplImage 指针/载入图像pImg = cvLoadImag
2、e( “C:UsersBBDesktopbecOPENCV 椭圆拟合定位椭圆中心点以及重心法定位程序OPENCV 椭圆拟合定位椭圆中心点以及重心法定位程序特征中心点提取误差分析image.bmp“, 1);/此处的argc=2 是否需要改成argc=1?我改了之后才能运行成功。求大牛解惑 / wmzzzz : 在“属性“|“debug“|里的 command arguments 里参加参数 (一个路径:要翻开的文件路径) 这时 argc=2 就合理了.可以试试多加几个int pointX = 0;for (int i=0;iwidth,pImg-height),IPL_DEPTH_8U,1);
3、IplImage*m_imageBw= cvCreateImage(cvSize(pImg-width,pImg-height),IPL_DEPTH_8U,1);cvCvtColor(pImg,m_imageGray,CV_RGB2GRAY); cvThreshold(m_imageGray,m_imageBw,128,255,CV_THRESH_BINARY); CvPoint2D32f pointXX;float XXX,YYY;for (int i = 0;i19;i+)4pointX=60*i+60;pointXX = GetCPoint(m_imageBw,pointX); XXX=
4、pointXX.x;YYY=pointXX.y;coutXXX“YYYendl;coutendl; coutendl; coutendl; coutendl; coutendl;FitEllipseBlob(m_imageBw);cvNamedWindow( “Image“, 1 );/创立窗口cvShowImage( “Image“, m_imageBw );/显示图像cvSaveImage(“image.bmp“,pImg);cvWaitKey(0); /等待按键cvDestroyWindow( “Image“ );/销毁窗口cvReleaseImage( &pImg ); /释放图像re
5、turn 0;CvPoint2D32f GetCPoint(IplImage* imageFg,int maxX)CvPoint2D32f point;double Xsum=0,Ysum=0,Sum=0; CvScalar Value;for (int j=0;jheight;j+)for (int i= maxX-60;ih_next)int i;int count= cont-total;/轮廓个数CvPoint2D32f center;CvSize size;/*个数必需大于 6,这是cvFitEllipse_32f 的要求if (count6)continue;/安排内存给点集Poi
6、ntArray = (CvPoint *)malloc(count*sizeof(CvPoint);PointArray2D32f = (CvPoint2D32f*)malloc(count*sizeof(CvPoint2D32f);/安排内存给椭圆数据box = (CvBox2D32f *)malloc(sizeof(CvBox2D32f);/得到点集这个方法值得借鉴 cvCvtSeqToArray(cont,PointArray,CV_WHOLE_SEQ);/将 CvPoint 点集转化为CvBox2D32f 集合for (i=0;icenter.x); center.y = cvRound(box-center.y);size.width = cvRound(box-size.width*0.5); size.height = cvRound(box-size.height*0.5); box-angle = -box-angle;XXXX=center.x;YYYY=center.y;coutXXXX“YYYYendl;free(PointArray); free(PointArray2D32f); free(box);cvShowImage(“Result“,image04);