1、根据矩形边的中点不断连线(具体效果看图):
import numpy as np
import cv2
import matplotlib.pyplot as plt
def show(image):
'''用来显示图片'''
plt.imshow(image)
plt.axis('off')
plt.show()
def value(a,b,lst=[]):
'''用递归的方式计算得到线段的中点'''
c = (a+b)/2
lst.append(c)
if a+100<c: # 设置递归停止的条件,否则会一直进行下去
value(a,c,lst)
if b>c+100:
value(c,b,lst)
return lst
image = np.zeros((500,500,3), dtype='uint8') # 创建一张黑色的图片
show(image)
lst = value(0,image.shape[1]) # 此时lst是乱序的而且有重复值
lst = sorted(list(set(lst)))
lst.append(image.shape[1])
# 1、先画出从左往右向上的斜线
for i in lst:
cv2.line(image, (0,int(i)), (int(i),0), (255,255,255),3)
cv2.line(image, (int(i),image.shape[1]), (image.shape[0],int(i)), (255,255,255),3)
# 2、再画出从左往右向下的斜线
for i in lst:
cv2.line(image, (int(i),0), (image.shape[0],image.shape[0]-int(i)), (255,255,255),3)
cv2.line(image, (0,int(i)), (image.shape[0]-int(i),image.shape[1]), (255,255,255),3)
cv2.line(image, (0,0), (image.shape[1],image.shape[1]), (255,255,255),3)
# 3、连接横着的线条
for i in lst:
cv2.line(image, (0,int(i)), (image.shape[0],int(i)), (255,255,255), 3)
# 4、连接竖着的线
for i in lst:
cv2.line(image, (int(i),0), (int(i),image.shape[1]), (255,255,255),3)
show(image)