`
mmdev
  • 浏览: 12947332 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

4连通边界填充算法

 
阅读更多

提前的配置和8连通的(上一篇相同)

4连通的代码如下:

#include <GL/glut.h>
#include <math.h>
typedef float Color[3];
rgbColorEqual(Color c1,Color c2)
{
if(abs(c1[1]-c2[1])<0.001 && abs(c1[2]-c2[2])<0.001 && abs(c1[0]-c2[0])<0.001)
return true;
else
return false;
}
void setPixel(GLint x, GLint y)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void getPixel(GLint x, GLint y, Color c)
{
glReadPixels(x,y,1,1,GL_RGB,GL_FLOAT,c);
}

void BoundaryFill8(int x, int y,Color fillColor,Color borderColor)
{
Color currentColor;
getPixel(x,y,currentColor);
if((!rgbColorEqual(currentColor,fillColor))&&(!rgbColorEqual(currentColor,borderColor)))
{
//setColor(fillColor);
setPixel(x,y);
BoundaryFill4( x+1, y, fillColor, borderColor);
BoundaryFill4( x-1, y, fillColor, borderColor);
BoundaryFill4( x, y+1, fillColor, borderColor);
BoundaryFill4( x, y-1, fillColor, borderColor);

}


}
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 200.0);

}
void Draw(void)
{
Color a={1.0,0.0,0.0},b={0.0,1.0,1.0};
glColor3fv(b);
glClear(GL_COLOR_BUFFER_BIT);
//设置边界线宽,否则填充时会溢出
glLineWidth(4.0);
//绘制多边形区域
glBegin(GL_LINE_LOOP);
glVertex2i(90, 40);
glVertex2i(120, 100);
glVertex2i(90, 160);
glVertex2i(60, 160);
glVertex2i(60, 40);
glEnd();
glColor3fv(a);
BoundaryFill8(70,60,a,b);
glFlush();
}
void main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(200, 200);
glutCreateWindow("4连通边界填充算法!");
init();
glutDisplayFunc(Draw);
glutMainLoop();
}

程序执行完则显示填充完整个多边形

分享到:
评论

相关推荐

    计算机图形学 边界定义的8连通区域的种子填充算法

    计算机图形学 边界定义的8连通区域的种子填充算法 计算机图形学 边界定义的8连通区域的种子填充算法 计算机图形学 边界定义的8连通区域的种子填充算法

    扫描线填充算法

    基于扫描线填充算法编写的程序。适用于计算机图形学研究人员。运行平台vs2008。

    计算机图形学OpenGL、codeblock、边界填充算法

    实验二 (选做)种子填充算法 (选做)扫描线算法

    计算机图形学 边界定义的8连通区域的种子填充算法源代码

    计算机图形学 边界定义的8连通区域的种子填充算法源代码 计算机图形学 边界定义的8连通区域的种子填充算法源代码

    openGl填充算法

    描述了OpenGL实现4连通递归填充算法

    四连通填充算法图形学

    计算机图形学实验 基于c++6.0的MFC类库实现的单界面程序源代码四连通

    橡皮筋画边界,右键点击闭合,四连通种子填充。

    橡皮筋算法画边界,右键点击闭合。四连通种子填充区域。可以改变 边界,以及填充颜色。

    基于扫描线区域填充算法

    基于扫描线区域填充算法,大家可以参考一下,开发一下思路。

    tuxing.zip_4连通_easyx画线_区域填充_种子区域填充_种子填充

    计算机图形学--区域填充算法的实现 一、实验目的和要求: 1、掌握区域填充算法基本知识 2、理解区域的表示和类型,能正确区分...4、将上述算法作部分改动应用于八连通区域,构成八连通区域种子填充算法,并编程实现。

    八后递归算法(C++)

    │ │ │ │ │4│ │ │ │ ├─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ │ │ │ │ │7│ ├─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ │ │ │5│ │ │ ├─┼─┼─┼─┼─┼─┼─┼...

    基于VC++的等值线追踪与填充算法 (2011年)

    针对传统绘制等值线算法用于追踪生成及颜色填充等值线图效率不高的问题,对传统网格追踪及区域填充算法进行改进,提出优化的追踪算法及基于边界点追踪的区域填充算法。通过描述等值线的数据结构、选取等值点实现了优化...

    计算机图形学 种子填充算法 MFC、VC

    种子填充算法,自己写的,希望对大家有用 // 种子法View.cpp : implementation of the CMyView class // #include "stdafx.h" #include "种子法.h" #include "种子法Doc.h" #include "种子法View.h" #ifdef _...

    计算机图形学—多边形扫描与填充

    包含了AET扫描算法、边界填充法、四连通种子算法

    VC++实现多边形填充

    ///////////////////////////////////////////////边界填充////////////////////////////////////// //Contrary()取反函数:如果点的颜色为白,则将点置为填充色;如果点的颜色为填充色,则将点置为白色 //忽略...

    基于边界标注的单连通区域扫描线填充新方法 (2003年)

    提出一种基于边界标注的单连通区域扫描线填充快速算法。在计算中先对目标边界进行标注,根据标注形成的标准进行判断,之后...对比传统单连通区域扫描线填充法,新方法算法效率高,实现简单,对复杂区域的填充同样适用。

    地理信息系统算法基础.rar

    11.5连通性分析算法 11.5.1Prim算法 11.5.2Kruskal算法 11.6资源分配算法 思考题 第12章地形分析算法 12.1数字地面模型的生成算法 12.1.1基于离散点的DEM规则网格的生成 12.1.2基于不规则三角网的DEM生成...

    SeedFilling.zip

    以种子点为起点,查看它是否是边界(根据颜色) 或者是否已经被填充。 如果是,则返回,否则填充该像素,并用一个邻接的像素作为新的种子进行递归。 算法步骤: a) 种子像素压入栈中; b) 如果栈为空,则转e);...

    论文研究-新的连通域标记方法及其在医学图像中的应用.pdf

    该算法先对读入二值图进行边界提取,再对边界进行跟踪和标记,利用图像重构的方法对边界进行区域填充,并将属于同一连通域的边界进行归类,即重新排列标记号,最后对连通区域的形态特征进行提取。实验证明,该算法...

    华东《计算机图形学》2017年春学期在线作业(一).doc

    利用种子填充算法实现多边形填充时,边界和内点的连通性要求是〔 〕. A. 内点为4连通时,边界必须为4连通 B. 内点为4连通时,边界必须为8连通 C. 内点为8连通时,边界必须为4连通 D. 内点为8连通时,边界必须为8连通 ...

Global site tag (gtag.js) - Google Analytics