jython JES: добавление профиля виньетки

я пытаюсь создать программу в JES с двумя функциями: main () и addVignette (inputPic, виньетка)

В функции main() будут созданы два объекта изображения. Я хочу, чтобы пользователь мог выбрать входное изображение (изображение, которым нужно управлять), а затем позволить пользователю выбрать виньетку (vignette_profile.jpg). После создания этих двух объектов-изображений следует вызвать addVignette(inputPic, vignette).

Функция addVignette(inputPic, vignette) должна быть написана так, чтобы принимать в качестве параметров два объекта изображения. Эти объекты изображения были созданы в функции main() и переданы в качестве входных данных этой функции. Таким образом, в основном, используя два объекта изображения, мне нужна моя функция для выполнения операции добавления виньетки, и эта операция должна применяться к каждому пикселю в изображении inputPic. Новое отредактированное изображение должно отображаться на экране.

У меня возникли проблемы с умножением изображений вместе. Я не уверен, что кодировка неверна или мое уравнение неверно. я не знаю, что именно кодировать, так как профиль виньетки имеет более темные края и более яркий центр.

Спасибо ребята!

    def main():
    file1 = pickAFile()
    file2 = pickAFile()
    inputPic=makePicture(file1)
    vignette=makePicture(file2)
    addVignette(inputPic,vignette)

    def addVignette(inputPic,vignette):
    if getWidth(inputPic)==getWidth(vignette) and getHeight(inputPic)==getHeight(vignette):
    explore(inputPic)
    explore(vignette)
    allpx=getAllPixels(inputPic)
    for px in getAllPixels(inputPic):
    x=getX(px)
    y=getY(px)
    px2=getPixelAt(vignette,x,y)
    x1=getX(px)
    y2=getY(px)
    r1=getRed(px)
    r2=getRed(px2)
    g1=getGreen(px)
    g2=getGreen(px2)
    b1=getBlue(px)
    b2=getBlue(px2)



    if (1<r2<137): 
      r3=(r2-r1)-33
      g3=(g2-g1)+21
      b3=(b1-b2)+51

    if (138<r2<210):
      r3=(r2-r1)-21
      g3=(g2-g1)+49
      b3=(b1-b2)+121

    if (211<r2<246):
      r3=(r2-r1)+66
      g3=(g2-g1)+138
      b3=(b1-b2)+177

    if (247<r2<255):
      r3=(r2-r1)+44
      g3=(g2-g1)+125
      b3=(b2-b1)+201

    setRed(px,r3)
    setGreen(px,g3)
    setBlue(px,b)

  explore(inputPic)  
   else:
   print "Try Again"    

person hlxxx    schedule 31.08.2014    source источник


Ответы (1)


Возможно, это не то, что вам нужно, но из вашего вопроса я понял, что у вас есть 2 изображения, которые вы пытаетесь объединить, одно из них просто виньетка.

Пожалуйста, замените addVignette() на приведенный ниже

def addVignette(inputPic,vignette):
  # Cycle through each pixel in the input image
  for oPixel in getPixels(inputPic):

    # Get the pixel from the Vignette image that is at the same
    # location as the current pixel of the input image
    vignettePixel = getPixel(vignette, getX(oPixel), getY(oPixel))

    # Get the average of the color values by adding the color
    # values from the input & vignette together and then dividing
    # by 2
    newRed = (getRed(oPixel) + getRed(vignettePixel)) / 2
    newGreen = (getGreen(oPixel) + getGreen(vignettePixel)) / 2
    newBlue = (getBlue(oPixel) + getBlue(vignettePixel)) / 2

    # Make a new color from those values
    newColor = makeColor(newRed, newGreen, newBlue)

    # Assign this new color to the current pixel of the input image
    setColor(oPixel, newColor)

  explore(inputPic)

Мои результаты с тестовыми изображениями ниже

входное изображение

Виньетка

введите здесь описание изображения

person super_mario3d    schedule 02.09.2014