PIL

2010-06-25 34 views

cevap

14

Çokgenleri ayrı bir RGBA görüntüsünde çizebilir ve Image.paste (görüntü, kutu, maske) yöntemini kullanabilir misiniz?

Düzenleme: Bu çalışır.

from PIL import Image 
from PIL import ImageDraw 
back = Image.new('RGBA', (512,512), (255,0,0,0)) 
poly = Image.new('RGBA', (512,512)) 
pdraw = ImageDraw.Draw(poly) 
pdraw.polygon([(128,128),(384,384),(128,384),(384,128)], 
       fill=(255,255,255,127),outline=(255,255,255,255)) 
back.paste(poly,mask=poly) 
back.show() 

http://effbot.org/imagingbook/image.htm#image-paste-method

4

Ben @Nick T 'ın cevabı iyi olduğunu düşünüyorum, ama özellikle birkaç annotating olabilir durumunda, çok büyük bir arka plan görüntüsü ile yazılı olarak yaptığı kodunu kullanırken dikkatli olmak gerekir söz konusu görüntüdeki çokgenler. Bu, bazı nesne algılama kodlarıyla büyük uydu görüntülerini işlerken ve şeffaf bir dikdörtgen kullanarak algılamalara açıklama eklerken yaptığım bir şey. Arka plan resminin boyutu ne olursa olsun kodu verimli hale getirmek için aşağıdaki öneriyi yaparım.

ben poligonu, arka görüntü olarak değil aynı boyuta tutmak için gerektiği gibi yapıştırmak olacak çokgen görüntü sadece kadar büyük olması belirtmek için çözüm değiştirir. Çokgenin koordinatları, global görüntü koordinatlarına değil, yerel sınırlayıcı kutuya göre belirtilir. Ardından poligon resmini daha büyük arka plan görüntüsünde ofsete yapıştırın.

import Image 
import ImageDraw 
img_size = (512,512) 
poly_size = (256,256) 
poly_offset = (128,128) #location in larger image 
back = Image.new('RGBA', img_size, (255,0,0,0)) 
poly = Image.new('RGBA', poly_size) 
pdraw = ImageDraw.Draw(poly) 
pdraw.polygon([ (0,0), (256,256), (0,256), (256,0)], 
       fill=(255,255,255,127), outline=(255,255,255,255)) 
back.paste(poly, poly_offset, mask=poly) 
back.show() 
1

Image.paste (resim, kutu, maske) çokgen görüntünün ilgili şeffaflık değeri içine arka plan görüntüsü yapıştırılan alan alfa kanalı dönüştürür metot kullanılarak.

Image.alpha_composite (IM1, IM2) yöntemi "yapıştırılan" görüntünün alfa kanalı kullanır ve arka plan saydam açılmayacaktır. Bununla birlikte, bu yöntemin iki eşit boyutlu görüntüye ihtiyacı vardır.