如何使用Python PILLOW绘制虚线或虚线或矩形。谁能帮我?使用openCV我可以做到这一点。但我想要使用枕头。
答案 0 :(得分:1)
我决定写出我在评论中建议的想法-即用实线绘制形状,然后叠加阈值的噪点图像以消除部分线条。
我将所有噪声都放在较小的图像上,然后按比例放大,以使噪声“更结实” ,而不是微小的斑点。
这只是测试图像的生成:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image, ImageDraw
# Make empty black image
im = Image.new('L', (640,480))
# Draw white rectangle and ellipse
draw = ImageDraw.Draw(im)
draw.rectangle([20,20,620,460],outline=255)
draw.ellipse([100,100,540,380],outline=255)
这将生成噪声叠加层并将其叠加-您只需删除此句子并将两个代码块合并在一起即可:
# Make noisy overlay, 1/4 the size, threshold at 50%, scale up to full-size
noise = np.random.randint(0,256,(120,160),dtype=np.uint8)
noise = (noise>128)*255
noiseim = Image.fromarray(noise.astype(np.uint8))
noiseim = noiseim.resize((640,480), resample=Image.NEAREST)
# Paste the noise in, but only allowing the white shape outlines to be affected
im.paste(noiseim,mask=im)
im.save('result.png')
结果是这样的:
固体绘制的图像是这样的:
噪音是这样的:
答案 1 :(得分:1)
由于@martineau的评论,我弄清楚了如何绘制虚线。这是我的代码。
cur_x = 0
cur_y = 0
image_width = 600
for x in range(cur_x, image_width, 4):
draw.line([(x, cur_y), (x + 2, cur_y)], fill=(170, 170, 170))
这将绘制一条灰色虚线。
答案 2 :(得分:0)
以下函数绘制一条虚线。它可能很慢,但是可以用,我需要它。
“破折号”是破折号的长度,以像素为单位。 -- “比率”是空白空间与短划线长度的比率(值越大,获得的空白空间越多)
import math # math has the fastest sqrt
def linedashed(x0, y0, x1, y1, dashlen=4, ratio=3):
dx=x1-x0 # delta x
dy=y1-y0 # delta y
# check whether we can avoid sqrt
if dy==0: len=dx
elif dx==0: len=dy
else: len=math.sqrt(dx*dx+dy*dy) # length of line
xa=dx/len # x add for 1px line length
ya=dy/len # y add for 1px line length
step=dashlen*ratio # step to the next dash
a0=0
while a0<len:
a1=a0+dashlen
if a1>len: a1=len
draw.line((x0+xa*a0, y0+ya*a0, x0+xa*a1, y0+ya*a1), fill = (0,0,0))
a0+=step