资源简介
以C语言开发的最小二乘法椭圆拟合程序,精度非常高,欢迎使用
代码片段和文件信息
#include “cv.h“
#include “highgui.h“
int slider_pos = 70;
IplImage *image02 = 0 *image03 = 0 *image04 = 0;
void process_image(int h);
int main( int argc char** argv )
{
const char* filename = argc == 2 ? argv[1] : (char*)“stuff.jpg“;
// 读入图像,强制为灰度图像
if( (image03 = cvLoadImage(filename 0)) == 0 )
return -1;
// Create the destination images
image02 = cvCloneImage( image03 );
image04 = cvCloneImage( image03 );
// Create windows.
cvNamedWindow(“Source“ 1);
cvNamedWindow(“Result“ 1);
// Show the image.
cvShowImage(“Source“ image03);
// Create toolbars. HighGUI use.
cvCreateTrackbar( “Threshold“ “Result“ &slider_pos 255 process_image );
process_image(0);
// Wait for a key stroke; the same function arranges events processing
cvWaitKey(0);
cvReleaseImage(&image02);
cvReleaseImage(&image03);
cvDestroyWindow(“Source“);
cvDestroyWindow(“Result“);
return 0;
}
// Define trackbar callback functon. This function find contours
// draw it and approximate it by ellipses.
void process_image(int h)
{
CvMemStorage* stor;
CvSeq* cont;
CvBox2D32f* box;
CvPoint* PointArray;
CvPoint2D32f* PointArray2D32f;
// 创建动态结构序列
stor = cvCreateMemStorage(0);
cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT sizeof(CvSeq) sizeof(CvPoint) stor);
// 二值话图像.
cvThreshold( image03 image02 slider_pos 255 CV_THRESH_BINARY );
// 寻找所有轮廓.
cvFindContours( image02 stor &cont sizeof(CvContour)
CV_RETR_LIST CV_CHAIN_APPROX_NONE cvPoint(00));
// Clear images. IPL use.
cvZero(image02);
cvZero(image04);
// 本循环绘制所有轮廓并用椭圆拟合.
for(;cont;cont = cont->h_next)
{
int i; // Indicator of cycle.
int count = cont->total; // This is number point in contour
CvPoint center;
CvSize size;
// Number point must be more than or equal to 6 (for cvFitEllipse_32f).
if( count < 6 )
continue;
// Alloc memory for contour point set.
PointArray = (CvPoint*)malloc( count*sizeof(CvPoint) );
PointArray2D32f= (CvPoint2D32f*)malloc( count*sizeof(CvPoint2D32f) );
// Alloc memory for ellipse data.
box = (CvBox2D32f*)malloc(sizeof(CvBox2D32f));
// Get contour point set.
cvCvtSeqToArray(cont PointArray CV_WHOLE_SEQ);
// Convert CvPoint set to CvBox2D32f set.
for(i=0; i {
PointArray2D32f[i].x = (float)PointArray[i].x;
PointArray2D32f[i].y = (float)PointArray[i].y;
}
//拟合当前轮廓.
cvFitEllipse(PointArray2D32f count box);
// 绘制当前轮廓.
cvDrawContours(image04contCV_RGB(255255255)
CV_RGB(255255255)018cvPoint(00));
// Convert ellipse data from float to integer representation.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8238 2007-02-24 14:57 例5-17\circles.png
文件 3647 2007-02-24 14:56 例5-17\fitellipse.c
文件 4196 2007-03-07 20:41 例5-17\fitellipse.dsp
文件 545 2007-03-07 20:41 例5-17\fitellipse.dsw
文件 138 2007-02-24 15:10 例5-17\Makefile
文件 44521 2007-03-07 22:17 例5-17\rice.png
目录 0 2008-10-21 09:23 例5-17
文件 440 2011-07-24 18:56 快捷方式 到 EPSnap.exe.lnk
----------- --------- ---------- ----- ----
61943 9
- 上一篇:学生信息管理系统(C++)
- 下一篇:MFC Tabcontrol 标签控件美化
相关资源
- mfc绘图大全(画直线、矩形、椭圆)
- MFC绘制Bezier曲线B样条曲线曲线拟合
- 椭圆曲线ECC加密解密算法的c语言实现
- MFC画图板,可以画一些基本图形,如
- 三维点云的圆柱面拟合
- 曲线拟合C语言实现
- 鼠标交互画圆及椭圆基于Bresenham、中
- MFC画图板,可以画一些基本图形,如
- MFC绘图直线、椭圆、矩形、网格
- MFC简单画图程序,重绘,点,线,矩
- 基于最小二乘法的平面拟合,图像背
- 运用CST方法拟合NACA翼型
- 计算机图形学作业,中点算法画椭圆
- mfc 画图直线、圆、椭圆
- 画图软件(直线、矩形、椭圆、三角
- 直线、圆、椭圆等图形的绘制
- 控制网平差C++代码实现
- 移动曲面拟合法C++描述
- mfc 实现画矩形、椭圆等 并可对其进行
- 基于C++版本的Bp神经网络,数据拟合,
- VC++ Bresenham Midpoint 算法画线圆椭圆
- 绘制多边形
- 用c++写的曲线拟合程序
- MFC画有角度的椭圆
- MFC编写的圆拟合工具
- MFC/GDI+绘制倾斜的椭圆
- 基于MFC的画直线,矩形,椭圆改变线
- 车辆检测-基于车底阴影特征-基于路面
- MFC基于对话框的交互式画图程序橡皮
- 利用多个二维点拟合圆、多个三维点
评论
共有 条评论