python ImageDraw类实现几何图形的绘制与文字的绘制
pythonPIL图像处理模块中的ImageDraw类支持各种几何图形的绘制和文本的绘制,如直线、椭圆、弧、弦、多边形以及文字等。
下面直接通过示例来进行说明:
#-*-coding:UTF-8-*- importnumpyasnp fromPILimportImage fromPILimportImageDraw fromPILimportImageFont defdraw_test(): #生成深蓝色绘图画布 array=np.ndarray((480,640,3),np.uint8) array[:,:,0]=0 array[:,:,1]=0 array[:,:,2]=100 image=Image.fromarray(array) #创建绘制对象 draw=ImageDraw.Draw(image) #绘制直线 draw.line((20,20,150,150),'cyan') #绘制矩形 draw.rectangle((100,200,300,400),'black','red') #绘制弧 draw.arc((100,200,300,400),0,180,'yellow') draw.arc((100,200,300,400),-90,0,'green') #绘制弦 draw.chord((350,50,500,200),0,120,'khaki','orange') #绘制圆饼图 draw.pieslice((350,50,500,200),-150,-30,'pink','crimson') #绘制椭圆 draw.ellipse((350,300,500,400),'yellowgreen','wheat') #外切矩形为正方形时椭圆即为圆 draw.ellipse((550,50,600,100),'seagreen','skyblue') #绘制多边形 draw.polygon((150,180,200,180,250,120,230,90,130,100),'olive','hotpink') #绘制文本 font=ImageFont.truetype("consola.ttf",40,encoding="unic")#设置字体 draw.text((100,50),u'HelloWorld','fuchsia',font) image.show() return
首先,通过ImageDraw类创建一个绘制对象draw;
draw.line():直线的绘制,第一个参数指定的是直线的端点坐标,形式为(x0,y0,x1,y1),第二个参数指定直线的颜色;
draw.rectangle():矩形绘制,第一个参数指定矩形的对角线顶点(左上和右下),形式为(x0,y0,x1,y1),第二个指定填充颜色,第三个参数指定边界颜色;
draw.arc():(椭)圆弧的绘制,第一个参数指定弧所在椭圆的外切矩形,第二、三两个参数分别是弧的起始和终止角度,第四个参数是填充颜色,第五个参数是线条颜色;
draw.chord():弦的绘制,和弧类似,只是将弧的起始和终止点通过直线连接起来;
draw.pieslice():圆饼图的绘制,和弧与弦类似,只是分别将起始和终止点与所在(椭)圆中心相连;
draw.ellipse():椭圆的绘制,第一个参数指定椭圆的外切矩形,第二、三两个参数分别指定填充颜色和线条颜色,当外切矩形是正方形时,椭圆即为圆;
draw.polygon():绘制多边形,第一个参数为多边形的端点,形式为(x0,y0,x1,y1,x2,y2,……),第二、三两个参数分别指定填充颜色和线条颜色;
draw.text():文字的绘制,第一个参数指定绘制的起始点(文本的左上角所在位置),第二个参数指定文本内容,第三个参数指定文本的颜色,第四个参数指定字体(通过ImageFont类来定义)。
绘制结果如下:
最后,补充一下python中所支持的颜色,如下图所示:
另外,颜色也可以使用"#"加上6位16进制字符串表示如“#ff0000”,则和“red”等价,前两位表示R通道的值,中间两位表示G通道的值,最后两位表示B通道的值。
PS:opencv+python实现基本图形的绘制及文本的添加
importcv2 importnumpyasnp importos classDrawing(object): """ 使用opencv绘制图形,支持直线,矩形,圆形,椭圆,多边形以及被标注文字添加 """ chart_list=['line','rectangle','circle','ellipse','polylines','puttext'] def__init__(self,src_img,dst_img,chart,dict_args): self.src_img=os.path.normpath(src_img) self.dst_img=os.path.normpath(dst_img) self.chart=chart self.dict_args=dict_args #颜色不传默认为红色 self.color=dict_args['color']ifdict_args.has_key('color')else(0,0,255) #线条粗细不传默认为2 self.thickness=dict_args['thickness']ifdict_args.has_key('thickness')else2 defhandle(self): #导入图片 self.src_img=cv2.imread(self.src_img) ifself.chartnotinself.chart_list: print'mustinputyourrightparameter' return ifself.chart=='line': #画直线 self.start=self.dict_args['start'] self.end=self.dict_args['end'] self.draw_line() elifself.chart=='rectangle': #画矩形 self.top_left=self.dict_args['top_left'] self.bottom_right=self.dict_args['bottom_right'] self.draw_rectangle() elifself.chart=='circle': #画圆形 self.center=self.dict_args['center'] self.radius=self.dict_args['radius'] self.draw_circle() elifself.chart=='ellipse': #画椭圆 self.center=self.dict_args['center'] self.axes=self.dict_args['axes'] #旋转角度,起始角度,终止角度可不传参,使用默认值 self.angle=self.dict_args['angle']ifself.dict_args.has_key('angle')else0 self.startangle=self.dict_args['startangle']ifself.dict_args.has_key('startangle')else0 self.endangle=self.dict_args['endangle']ifself.dict_args.has_key('endangle')else360 self.draw_ellipse() elifself.chart=='polylines': #画多边形 ifnotisinstance(self.dict_args['points'],list): self.pts=list(self.dict_args['points']) self.pts=np.array(self.dict_args['points'],np.int32) self.close=self.dict_args['close']ifself.dict_args.has_key('close')elseTrue self.draw_polylines() else: #标注文本 self.text=self.dict_args['text'] self.position=self.dict_args['position'] #字体,文字大小可不传参,使用默认值 self.font=self.dict_args['font']ifself.dict_args.has_key('font')elsecv2.FONT_HERSHEY_SIMPLEX self.size=self.dict_args['size']ifself.dict_args.has_key('size')else1 self.add_text() cv2.imwrite(self.dst_img,self.src_img) defdraw_line(self): #划线 #输入参数分别为图像,开始坐标,结束坐标,颜色数组,粗细 cv2.line(self.src_img,self.start,self.end,self.color,self.thickness) defdraw_rectangle(self): #画矩形 #输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2.rectangle(self.src_img,self.top_left,self.bottom_right,self.color,self.thickness) defdraw_circle(self): #画圆形 #输入参数为图像,圆心,半径,线条颜色,粗细 cv2.circle(self.src_img,self.center,self.radius,self.color,self.thickness) defdraw_ellipse(self): #画椭圆 #输入参数为图像,中心,(长轴,短轴),旋转角度,起始角度,终止角度,线条颜色,粗细 cv2.ellipse(self.src_img,self.center,self.axes,self.angle,self.startangle,self.endangle,self.color,self.thickness) defdraw_polylines(self): #画多边形 #输入参数为图像,多边形各个顶点坐标,是否连成封闭图形,线的颜色,粗细 cv2.polylines(self.src_img,[self.pts],self.close,self.color,self.thickness) defadd_text(self): #标注文本 #输入参数为图像、文本、位置、字体、大小、颜色数组、粗细 cv2.putText(self.src_img,self.text,self.position,self.font,self.size,self.color,self.thickness)
以上就是pythonImageDraw类实现几何图形的绘制与文字的绘制的详细内容,更多关于python几何图形的绘制的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。