Эта программа должна взять контур изображения, затем разбить его на разные квадранты, а затем покрасить его, например, изображение Энди Уорхола Мэрилин Монро.Обработка изображений на Jython
Каждая функция до функции «Уорхолиза» работает, но она застревает на c=getPixel(picEdge,x,y)
под функцией warholize
, на которой я не уверен, что делать. Любая помощь будет принята с благодарностью. Он должен делать «пусть с цвет пикселя в picEdge на месте х, у»
def main():
pic= makePicture(pickAFile())
show(pic)
threshold= 10
edgePic= makeOutline(pic, threshold)
warholize(pic)
show(warholize(pic))
def difference(a, b):
if a > b :
return a - b
else:
return b - a
def intensity(px) :
r= getRed(px)
g= getBlue(px)
b= getGreen(px)
avg= (r + g + b)/3
return avg
def makeOutline(pic, threshold):
w= getWidth(pic)
h= getHeight(pic)
edgePic= makeEmptyPicture(w, h)
for x in range(2,w-1) :
for y in range(2,h-1):
px= getPixel(pic, x, y)
pxLeft= getPixel(pic, x-1, y)
pxUp= getPixel(pic, x, y-1)
leftDiff= difference(intensity(pxLeft), intensity(px))
upDiff= difference(intensity(pxUp), intensity(px))
if leftDiff > threshold or upDiff > threshold :
setColor(getPixel(edgePic,x,y), black)
def warholize(pic):
threshold=10
picEdge=makeOutline(pic,threshold)
w= getWidth(pic)
h= getHeight(pic)
picNew= makeEmptyPicture(w, h)
for x in range(0,w,2):
for y in range (0,h,2):
c=getPixel(picEdge,x,y)
px=getPixel(picNew,x/2,y/2)
if c is black:
setColor(px,blue)
else:
setColor(px,yellow)
return picNew
Если каждая функция работает с функцией warholize, то как она застревает в функции makeOutline? Вы получаете ошибки? Кто они такие? Кстати, вы вызываете makeOutline в warholize с неопределенным порогом, насколько я могу судить. Кроме того, в makeOutline мне кажется, что ваши диапазоны должны быть в диапазоне (2, w) и диапазоне (2, h). –
Я исправил порог за ваш совет, и он сработал, но теперь он застрял в c = getPixel (picEdge, x, y). Предполагается, что он захватит цвет этого пикселя, но я не уверен, как это сделать. – roger34
Вы действительно хотите дважды вызвать 'warholize()' в 'main()'? – Anthon