这篇文章上次修改于 244 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

在opencv中提供有绘制图形的语法,先生成一张512x512的三通道彩色图片,并将背景设置为白色:

import numpy as np
import cv2
image = np.ones((512, 512, 3), dtype = "uint8")*255#白色背景

接下来就可以绘制图形:
绘制线条:
cv2.line(image, starting cordinates, ending cordinates, color, thickness[, lineType ]])

  • color:绘制形状的颜色。通常使用 BGR 模型表示颜色,例如(0, 255, 0)表示绿色。对于灰度图像,只能传入灰度值。
  • thickness:线条的粗细。默认值是 1,如果设置为-1,表示填充图形(即绘制的图形是实心的)
  • lineType:线条的类型,默认是 8 连接类型。 lineType 参数的值及说明如表
    image.png

绘制矩形:
cv2.rectangle(image, starting vertex, opposite vertex, color, thickness)

  • starting vertex 为矩形顶点。
  • opposite vertex 为矩形中与 pt1 对角的顶点。

绘制圆形:
cv2.cirlce(image, center, radius, color, fill)

  • 图片,圆心,半径,颜色

绘制椭圆:
image.png

下面综合应用,使用这些函数绘制一个房子图片:

import numpy as np
import cv2
image = np.ones((512, 512, 3), dtype = "uint8")*255#白色背景
d=512
for i in range(0,20):#画云
    centerX = np.random.randint(0,high = d)
    #生成随机圆心X
    centerY = np.random.randint(0,high = d/4)
    #生成随机圆心Y
    radius = np.random.randint(5,high = d/10)
    cv2.circle(image,(centerX,centerY),radius,(235,206,135),-1)
    
cv2.ellipse(image, (240,400), (100,250), 90, 0, 360, (0,255,0),-1)#画椭圆,草地
cv2.line(image, (110,80), (110,145), (107,183,189), 3)#画线条,烟囱
cv2.line(image, (110,80), (150,80), (107,183,189), 3)#画线条,烟囱
cv2.line(image, (150,80), (150,120), (107,183,189), 3)#画线条,烟囱
pts = np.array( [[80,170],[400,170],[256,50]], np.int32)#画个三角形,屋顶
pts = pts.reshape((-1,1,2)) 
cv2.polylines(image, [pts],True , (32,165,218), 3)
cv2.circle(image, (256,120), 30, (0,0,0), -1) #画圆,屋顶那个圆
cv2.rectangle(image, (80,171), (400,400), (128,128,240), -1)#画矩形,房子主体
cv2.rectangle(image, (170,230), (290,400), (0,215,255), -1)#画矩形,门框
cv2.rectangle(image, (190,250), (270,400), (0,69,255), -1)#画矩形,门
cv2.rectangle(image, (190,401), (270,512), (32,165,218), -1)#画矩形,路面
cv2.rectangle(image, (315,220), (380,280), (255,255,255), -1)#画矩形,窗户
cv2.line(image, (316,250), (379,250), (0,0,0), 1)#画线条,窗户横线
cv2.line(image, (347,220), (347,280), (0,0,0), 1)#画线条,窗户竖线
cv2.circle(image, (230,270), 5, (0,0,0), -1) #画圆,门洞
cv2.circle(image, (200,340), 5, (0,215,255), -1) #画圆,门把手
cv2.putText(image, 'fu guang xiao zhu', (0,50), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (180,130,70), 2)

cv2.imshow("tang chen yi ping", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
image.png