Предотвратить растягивание изображения в полноэкранном режиме для психопи

Это первый раз, когда я использую это программное обеспечение для создания эксперимента.

Для моего эксперимента я представляю два изображения рядом, в идеале я хотел бы запустить этот эксперимент в полноэкранном режиме, но когда я устанавливаю значение true, изображения растягиваются. Как мне исправить их соотношение сторон, чтобы я мог запускать программу в полноэкранном режиме, не растягивая изображения?

Я использую MacBook Pro и кодер PsychoPy.

Вот мой текущий код для изображений:

scale=0.7
faceRGB = visual.ImageStim(win,image='male.jpg', 
mask=None,
pos=(0.0,0.0),
size=(scale,scale))


faceRGBINV = visual.ImageStim(win,image='maleInv.jpg', 
mask=None,
pos=(0.0,0.0),
size=(scale,scale)`

Кроме того, в моем эксперименте одно из изображений будет слегка сжато или растянуто. Затем участники должны будут выбрать более толстое лицо. Это уже настроено, и при запуске в окне изображения выглядят нормально, просто в полноэкранном режиме они растягиваются, чтобы соответствовать размеру монитора.


person Jack E Farr    schedule 20.10.2014    source источник


Ответы (1)


По умолчанию PsychoPy использует «норму» в качестве единиц измерения, то есть размер, нормализованный по размерам окна. У вас может возникнуть ситуация, когда вы (1) изменяете размер изображения и (2) изображение просто имеет правильные размеры при представлении в окне по умолчанию 800 x 800 пикселей, но выглядит растянутым при переходе в полноэкранный режим, потому что ваш монитор другое соотношение сторон.

Если вы не измените размер изображения, PsychoPy сохранит правильное соотношение сторон. Масштабирование изображения сохранит это соотношение сторон, так что это простое решение. Например. добавьте одну строку после запуска ImageStim:

scale = 0.7

from psychopy import visual
win = visual.Window(fullscr=True)
faceRGB = visual.ImageStim(win, 'male.jpg')
faceRGB.size *= scale  # scale the image relative to initial size

Если вы хотите управлять размером напрямую, а не только пропорционально, см. это обсуждение в списке пользователей. Я предложил следующее решение. Скажем, вы хотите установить размер изображения так, чтобы scale была максимальной длиной по любой из осей x- или y, и пропорционально масштабировать другую ось. Замените последнюю строку выше на эту:

faceRGB.size *= scale / max(faceRGB.size)

Умножение поддерживает соотношение сторон, как указано выше, а правая часть — это коэффициент умножения, обеспечивающий scale. Измените max на min, если вы хотите, чтобы это применялось к минимальной длине, а не к максимальной.

Примечание: вам не нужно устанавливать pos=(0,0) и mask=None, так как это значение этих параметров по умолчанию.

person Jonas Lindeløv    schedule 20.10.2014
comment
Привет, большое спасибо за ответ. Мой текущий код для изображений выглядит следующим образом: ), size=(масштаб,масштаб)) faceRGBINV = visual.ImageStim(win,image='maleInv.jpg', mask=None, pos=(0.0,0.0), size=(scale,scale)) Извините, если это кажется довольно простой, но где я могу реализовать эту новую строку кода? Еще раз спасибо за ваше время и помощь. - person Jack E Farr; 21.10.2014
comment
Всегда полезно предоставить код в вопросе, поэтому не стесняйтесь редактировать его и обновлять с помощью вашего конкретного примера. В этом примере faceRGB — это ваш объект стимула, поэтому faceRGB.size — это свойство, которое вы хотите изменить. Вы можете сделать это ПОСЛЕ инициализации, т.е. на строке ниже вызова visual.ImageStim. Обратите внимание, что faceRGB.size — это то же свойство, что и visual.ImageStim(size=4), но в последнем случае вы не можете выполнять над ним операции. Прочтите здесь базовый синтаксис Python — у вас также не может быть встроенного комментария. То, что я назвал imageSize, вы назвали scale - person Jonas Lindeløv; 21.10.2014
comment
Я обновил свой вопрос с дополнительными деталями. В настоящее время я читаю о синтаксисе Python, но также пытаюсь запустить свой эксперимент как можно скорее. Я изо всех сил пытаюсь понять, как я реализую то, что вы предложили. Только там, где у меня есть (масштаб, масштаб), нужно изменить? - person Jack E Farr; 21.10.2014
comment
Я обновил ответ, чтобы он соответствовал вашим именам переменных. Из ваших последних предложений не совсем понятно, хотите ли вы, чтобы психопия растянула изображение, или лицо уже жирнее/белее на исходном изображении. Если вы хотите, чтобы психопия растянула его (например, шире), просто умножьте размер на одно измерение в новой строке: faceRGB.size *= [1.3, 1] (30 процентов шире, но такая же высота) - person Jonas Lindeløv; 21.10.2014