计算机图形学四连通区域种子填充算法实验精要.docxVIP

  • 62
  • 0
  • 约3.1千字
  • 约 9页
  • 2017-05-11 发布于湖北
  • 举报

计算机图形学四连通区域种子填充算法实验精要.docx

计算机图形学四连通区域种子填充算法实验精要

《计算机图形学实验》报告任课教师:钱文华2016年春季学期实验:四连通区域种子填充算法实验时间:2016年12月8日实验地点:信息学院2204实验目的:掌握种子填充算法的原理,并会用种子填充算法和opengl并结合使用c++语言编写程序绘制多边形。实验原理:种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。内点的检测条件:if(interiorColor!=borderColorinteriorColor!=fillColor)。种子填充算法常用四连通域和八连通域技术进行填充操作。从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有时不能填充八向连通区域。四向连通填充算法:a)种子像素压入栈中;b)如果栈为空,则转e);否则转c);c)弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该像素压入栈;d)转b);e)结束。四连通填充算法利用到了递归的思想。本实验只包括四连通填充算法程序代码:#includeglut.h #includestdlib.h #includemath.h #includewindows.h void init(void) { glClearColor(1.0,1.0,1.0,0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,300.0,0.0,300.0);} void setPixel(int x,int y,long fillColor){ glColor3f(fillColor16,fillColor8,fillColor); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); } void boundaryFill4(int x,int y,long fillColor,long borderColor) { unsigned char params[3]; long interiorColor; glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,params); interiorColor=RGB(params[0],params[1],params[2]); if(interiorColor!=borderColorinteriorColor!=fillColor) { setPixel(x,y,fillColor); 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 lineSegment(void) { long borderColor=RGB(255,0,0); long fillColor=RGB(0,0,255); glClear(GL_COLOR_BUFFER_BIT); glColor3f(255,0,0); glBegin(GL_LINE_LOOP); glVertex2i(0,40); glVertex2i(20,0); glVertex2i(60,0); glVertex2i(80,40); glVertex2i(60,80); glVertex2i(20,80); glEnd(); boundaryFill4(60,60,fillColor,borderColor); glFlush(); } void main(int argc,char** argv) { glutInit(argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(150,100); glutInitWindowSize(

文档评论(0)

1亿VIP精品文档

相关文档