【问题标题】:Psychopy: Rescale all visual image objects at oncePsychopy:一次重新缩放所有视觉图像对象
【发布时间】:2026-01-28 04:50:01
【问题描述】:

我正在 Psychopy 1.85.1 中实施一个实验。

任务将在 1920 x 1080 显示器(即 16:9 纵横比)上进行管理。

而不是通过以下方式更改我使用的每个视觉图像对象的大小:

some_obj.size *= [0.6,1]

我宁愿使用单行代码,让所有视觉对象的大小参数普遍用于解决因 16:9 比例导致的翘曲。

有什么建议吗?

编辑:下面是由 Psychopy 默认为 4:3 比例和适当图像引起的拉伸示例。左边是图片大小不变的情况,右边是图片大小改变的情况,如上图。

实验窗口的创建者:

myWin = visual.Window(size = (1200,675), fullscr = False,
                      winType = 'pyglet', color = 'white') 

上面显示的圆形图像,由以下人员创建:

testCircleL = visual.Circle(myWin, fillColor = 'lightskyblue', lineColor = 'lightskyblue', units = 'norm',
                       radius = 0.5, pos=(-.50,0.15))
testCircleR = visual.Circle(myWin, fillColor = 'lightskyblue', lineColor = 'lightskyblue',
                       radius = 0.5, pos=(0.5,0.15)); testCircleR.size *= [0.6,1]

【问题讨论】:

  • 您可能想提供更多详细信息。现在的图片尺寸是多少?他们必须全屏吗?您可以只放置一个彩色背景,然后以它们的原始大小将它们放在它上面。或者您可以使用其他一些工具来缩放和调整屏幕大小。 Imagemagick 对我来说效果很好。展示一些你现在如何做的代码,以及发生的事情有什么“错误”。
  • 感谢您的评论。我已经编辑了上面的解释。问题特别是,无论您在psychopy中制作对象的大小 - 它默认为4:3的纵横比,并且在创建具有不同纵横比的窗口时,都需要缩放图像。我可以逐个扩展它们,但宁愿让它一次发生。
  • PsychoPy 并不真正默认为 4:3 纵横比。听起来您正在使用norm 单位,它与屏幕的两个尺寸成正比(即宽度 = 2,高度 = 2)。要使您的刺激在不同的窗口纵横比中可移植,请改用 units = heightpsychopy.org/general/units.html

标签: python aspect-ratio psychopy


【解决方案1】:

正如 Mike 在 cmets 中指出的那样,如果保持纵横比是问题所在,请使用 heightpix(像素)或 deg 作为 units in the window,例如 myWin = visual.Window(units='pix')。请注意,对于 deg,您必须在 Monitor Center 中输入一些距离测量值才能使其工作。另外,请注意,您必须重新调整脚本中的数字。例如,0.5“标准”的半径很大,而 0.5 像素的半径几乎不能覆盖一个像素。

如果您真的想一次扩展多个刺激,您可能会循环执行:

# Set up many visual objects
stim1 = visual.Circle(myWin)
stim2 = visual.ImageStim(myWin)
stim3 = visual.GratingStim(myWin)

# Scale multiple visual objects
for this_stim in [stim1, stim2, stim3]:
    this_stim.size *= [0.6, 1]

当然,这只适用于具有size 属性的刺激。

【讨论】:

    最近更新 更多