मैं एक एफ़िन रूपांतरण के साथ ऐसा करने में सक्षम था (this question के लिए धन्यवाद)। Affine परिवर्तन के बाद, गंतव्य त्रिकोण एक मुखौटा के लिए खींचा जाता है और फिर गंतव्य छवि पर चिपकाया जाता है।
import Image
import ImageDraw
import numpy
def transformblit(src_tri, dst_tri, src_img, dst_img):
((x11,x12), (x21,x22), (x31,x32)) = src_tri
((y11,y12), (y21,y22), (y31,y32)) = dst_tri
M = numpy.array([
[y11, y12, 1, 0, 0, 0],
[y21, y22, 1, 0, 0, 0],
[y31, y32, 1, 0, 0, 0],
[0, 0, 0, y11, y12, 1],
[0, 0, 0, y21, y22, 1],
[0, 0, 0, y31, y32, 1]
])
y = numpy.array([x11, x21, x31, x12, x22, x32])
A = numpy.linalg.solve(M, y)
src_copy = src_img.copy()
srcdraw = ImageDraw.Draw(src_copy)
srcdraw.polygon(src_tri)
src_copy.show()
transformed = src_img.transform(dst_img.size, Image.AFFINE, A)
mask = Image.new('1', dst_img.size)
maskdraw = ImageDraw.Draw(mask)
maskdraw.polygon(dst_tri, fill=255)
dstdraw = ImageDraw.Draw(dst_img)
dstdraw.polygon(dst_tri, fill=(255,255,255))
dst_img.show()
dst_img.paste(transformed, mask=mask)
dst_img.show()
im100 = Image.open('test100.jpg')
im250 = Image.open('test250.jpg')
tri1 = [(10,10), (20,20), (10,20)]
tri2 = [(35,30), (75,19), (50,90)]
transformblit(tri1, tri2, im100, im250)
स्रोत 100x100 छवि इस तरह (सफेद में आच्छादित त्रिकोण) दिखता है:: यहाँ है कि मैं क्या के साथ आया है

गंतव्य 250x250 छवि लगता है कि यह (त्रिकोणीय क्षेत्र के साथ में भरा सफेद):

और फिर परिवर्तन और पेस्ट करने के बाद, des tination छवि इस तरह दिखता है:

क्या आप हाथ से परिवर्तन की गणना नहीं करना चाहते थे? – carlosdc
हां, लेकिन ऐसा लगता है कि पीआईएल के साथ ऐसा करने का कोई तरीका नहीं था।यह बहुत अधिक परेशानी नहीं थी क्योंकि मुझे संदर्भित पोस्ट से फॉर्मूला मिला और numpy मेरे लिए समीकरणों की प्रणाली हल करता है। जो मैं वास्तव में टालना चाहता था वह पिक्सेल-बाय-पिक्सेल की प्रतिलिपि बना रहा था। – jterrace