Psychtoolbox 脑电实验范式之mp4视频绘制

1. 读取

首先需要使用到Screen(‘OpenMovie’)函数,该函数可以读取mp4、gif格式的数据,具体方式如下:

clear;
clc;
Screen('Preference', 'SkipSyncTests', 1);
screens = Screen('Screens');
screenNum = max(screens);
[window, screenRect] = Screen('OpenWindow',screenNum);
%HideCursor;
%设置图片
[leftPtr, dl, fpsl, wl, hl, zhenshul]=Screen('OpenMovie', window, 'F:\Matlab\混淆刺激范式\left.mp4');

其中leftPtr为函数读取视频的指针,dl表示视频时长,fps1表示视频频率,wl表示视频宽度,hl表示视频高度,zhenshul表示帧数。

2. 设置开始时间

需要使用到Screen(‘SetMovieTimeIndex’)函数:

Screen('SetMovieTimeIndex', leftPtr, 0)

这里leftPtr表示视频读取后的指针,0表示设置视频从0秒开始播放。

3.设置视频播放区域和位置,循环次数

首先读取屏幕大小即屏幕长宽高

[screenXpixels, screenYpixels] = Screen('WindowSize', window);

screenXpixels表示屏幕宽度,screenYpixels表示屏幕高度
接着设置绘制区域,使用CenterRectOnPoint函数:

leftRect = CenterRectOnPoint([0, 0, wl, hl], screenXpixels / 4, screenYpixels / 2);

第一个[]表示绘制图的长宽以及从相对当前位置的哪里开始绘制,00表示相对当前位置的起始点开始绘制,screenXpixels / 4, screenYpixels / 2表示CenterRectOnPoint相对屏幕的位置,即从屏幕宽1/4、高1/2处绘制。大致是这个意思,具体如下图:
在这里插入图片描述循环次数设置代码如下:

Screen('PlayMovie', leftPtr, 1, 1, 1);
4. 设置循环播放,代码如下:
while true
    lefttex = Screen('GetMovieImage', window, leftPtr, [], [], 2);
    if lefttex > 0
        Screen('DrawTexture', window, lefttex, [], leftRect);
        Screen('Close', lefttex);
    end
    Screen('Flip', window);

    % 检查键盘输入以退出循环
    [keyIsDown, ~, keyCode] = KbCheck;
    if keyIsDown
        if keyCode(KbName('Q'))
            break;
        end
    end

end
Screen('PlayMovie', leftPtr, 0);
Screen('CloseMovie', leftPtr);
Screen('CloseAll');
5.整体代码如下,代码给出三个视频left、mid、right运行:
clear;
clc;
Screen('Preference', 'SkipSyncTests', 1);
screens = Screen('Screens');
screenNum = max(screens);
[window, screenRect] = Screen('OpenWindow',screenNum);
%HideCursor;
%设置图片

[leftPtr, dl, fpsl, wl, hl, zhenshul]=Screen('OpenMovie', window, 'F:\Matlab\混淆刺激范式\left.mp4');
[midPtr, dm, fpsm, wm, hm, zhenshum]=Screen('OpenMovie', window, 'F:\Matlab\混淆刺激范式\mid.mp4');
[rightPtr, dr, fpsr, wr, hr, zhenshur]=Screen('OpenMovie', window, 'F:\Matlab\混淆刺激范式\right.mp4');
Screen('SetMovieTimeIndex', leftPtr, 0)
Screen('SetMovieTimeIndex', midPtr, 0)
Screen('SetMovieTimeIndex', rightPtr, 0)
% 设置视频播放区域
[screenXpixels, screenYpixels] = Screen('WindowSize', window);



leftRect = CenterRectOnPoint([0, 0, wl, hl], screenXpixels / 4, screenYpixels / 2);
midRect = CenterRectOnPoint([0, 0, wm, hm], screenXpixels / 2, screenYpixels / 2); % 中间视频区域
rightRect = CenterRectOnPoint([0, 0, wr, hr], 3*screenXpixels  / 4, screenYpixels / 2); % 右侧视频区域

Screen('PlayMovie', leftPtr, 1, 1, 1);
Screen('PlayMovie', midPtr, 1, 1, 1);
Screen('PlayMovie', rightPtr, 1, 1, 1);

while true
    lefttex = Screen('GetMovieImage', window, leftPtr, [], [], 2);
    midTex = Screen('GetMovieImage', window, midPtr, [], [], 2);
    rightTex = Screen('GetMovieImage', window, rightPtr, [], [], 2);
    if lefttex > 0
        Screen('DrawTexture', window, lefttex, [], leftRect);
        Screen('Close', lefttex);
    end
    if midTex > 0
        Screen('DrawTexture', window, midTex, [], midRect);
        Screen('Close', midTex);
    end
    if rightTex > 0
        Screen('DrawTexture', window, rightTex, [], rightRect);
        Screen('Close', rightTex);
    end
    Screen('Flip', window);

    % 检查键盘输入以退出循环
    [keyIsDown, ~, keyCode] = KbCheck;
    if keyIsDown
        if keyCode(KbName('Q'))
            break;
        end
    end

end
Screen('PlayMovie', leftPtr, 0);
Screen('PlayMovie', midPtr, 0);
Screen('PlayMovie', rightPtr, 0);
Screen('CloseMovie', leftPtr);
Screen('CloseMovie', midPtr);
Screen('CloseMovie', rightPtr);
Screen('CloseAll');

绘制结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/750830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【pytorch09】数学运算

1.数学操作 add/minus/multiply/dividematmulpowsqrt/rsqrtround 2.加减乘除 加法 矩阵乘法 torch.mm 只适用于2d torch.matmul 要分清楚是矩阵元素相乘,还是矩阵相乘 例子 x一共有4张照片,每张照片打平成784的向量,希望降维得到[4,51…

CDGA数据治理:数字化时代的基石

随着数字化浪潮的汹涌而来,数据已成为当今世界的核心驱动力。无论是企业决策、市场趋势预测,还是个性化用户体验,都离不开数据的支撑。而在这一过程中,数据治理的重要性日益凸显,成为实现数字化转型、发挥数据价值的最…

el-form-item的label设置两端对齐

<style scoped> ::v-deep .el-form-item__label {display: inline;text-align-last: justify; } </style>需要给两个form设置同样的label-width <el-form-item label"信号机名称" label-width"75px"><el-input type"text" …

计算机组成原理——存储器

1. 主存储器 1.1. 概述 1.1.1. 主存的组成 主存由存储芯片组成。主存由半导体集成电路组成。半导体是“原材料”,集成电路是“加工技术”,存储芯片则是利用这种技术制造出来的、具有特定功能(数据存储)的“产品”。驱动器、译码器和读写电路均制作在存储芯片中而 MAR、MD…

隐秘而又复杂的恶意软件:SSLoad

SSLoad 是一种隐秘的恶意软件&#xff0c;主要通过钓鱼邮件打开突破口&#xff0c;收集各种信息再回传给攻击者。近期&#xff0c;研究人员发现 SSLoad 通过诱饵 Word 文档投递恶意 DLL 文件&#xff0c;最终部署 Cobalt Strike。另一种攻击方式是利用钓鱼邮件诱导受害者到 Azu…

上古世纪战争台服官网地址+台服预约+预创建角色教程

上古世纪战争台服上线啦&#xff0c;在《上古世纪战争》中&#xff0c;通过主要势力和地区&#xff0c;剧情和角色可以想起原作。《上古世纪战争》的主要背景为&#xff0c;原大陆消失之后&#xff0c;完成移民的种族们定居在诺伊大陆之后遇到的多个势力之间的冲突。同时&#…

解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟

今天删除虚拟机无用的快照的时候突然发现k8s集群的一台虚拟机打不开了并且也不能返回快照 报错如下 指定的文件不是虚拟磁盘 打不开磁盘“e:\1.虚拟机\vm2\centos 7 64 位-cl1-000003-s019.vmdk”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟机。 找了很多…

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的&#xff1a; 生成wip fiberNode树标记副作用flags 更新流程的步骤&#xff1a; 递&#xff1a;beginWork归&#xff1a;completeWork 在 上一节 &#xff0c;我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…

未来一周比特币价格及数字货币市场预测

荷月的比特币市场就像过山车一样&#xff0c;仅仅六月下旬就跌去-12%&#xff0c;本周更是暴跌-6%&#xff0c;至 58,378美元。在这种市场表现&#xff0c;应有的踩踏如期而至。德国政府今日宣布再出售750 比特币的行为继续打击多头&#xff0c;但是小编认为这恰恰预示着市场可…

简化收支记录,只留关键日期! 一键掌握财务流动,高效管理您的每一笔收支

在繁忙的生活中&#xff0c;管理个人或家庭的财务收支变得尤为重要。然而&#xff0c;传统的记账方式往往繁琐且复杂&#xff0c;让人望而却步。今天&#xff0c;我们为您推荐一款简洁易用的记账神器——晨曦记账本&#xff0c;让您轻松记录收支&#xff0c;只显示日期&#xf…

全球首部 Sora 生成宣传片《玩具反斗城的起源》亮相;钉钉全新 AI 小时搜索对所有大模型开放丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

【Pillow】module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘问题解决

问题描述 我在使用 SummaryWriter 记录图片数据日志时&#xff0c;遇到了报错&#xff0c;如下图所示&#xff1a; 问题的原因在于&#xff0c;使用的pillow版本已经舍弃了ANTIALIAS&#xff0c;在新版本中已经改为了LANCZOS 问题解决 两种解决方式&#xff1a; 修改源码更…

Python学习打卡:day17

day17 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day17121、Python 操作 MySQL 基础使用pymysql创建到 MySQL 的数据库链接执行 SQL 语句执行非查询性质的SQL语句执行查询性质的SQL语句 122、Pyth…

[游戏开发][UE5]引擎使用学习记录

C Log和蓝图Log C Log 方法 UE_Log(参数1&#xff0c;参数2&#xff0c;参数3) //举例: UE_LOG(LogTemp, Error, TEXT("Log Info: %s"),"Test Log"); 三个参数的作用 参数1&#xff1a;输出窗口归类使用&#xff0c;你写什么它就显示什么 参数2&#x…

前端实现 海浪(波浪)进度条效果(支持自定义长度;调节速度,2s缓冲结束)

实现海浪进度条 文章目录 实现海浪进度条效果图如下(投入使用的版本)背景和过程一、调试和探索过程(下面都会给出来对应代码)二、类似Element-plus的进度条样式1. CSS的样式如下2. HTML结构如下 二、电涌效果的进度条如下1. CSS的样式如下2. HTML的结构如下:3. JavaScript代码如…

日元跌破160大关,日本当局何时干预?

KlipC报道&#xff1a;6月26日&#xff0c;日元又跌了&#xff0c;美元兑日元跌破160的整关口&#xff0c;超过了4月日本官员在市场上干预的水平&#xff0c;创1986年来新低。美联储降息的可能性降低&#xff0c;市场预计日元有可能延续当前的弱势。 KlipC分析师David表示&…

克服指标管理痛点,实现数据价值最大化

在当下的企业管理中&#xff0c;由于数据量的激增&#xff0c;管理方式逐渐从基于经验转向基于数据。在此过程中&#xff0c;我们能够通过数据探查业务情况、分析数据&#xff0c;从而获取更优的决策支持数据。这通常通过数据报表或分析平台来实现&#xff0c;对于临时性场景&a…

基于Spring Boot医护人员排班系统

设计技术&#xff1a; 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatisvue 工具&#xff1a;IDEA、Maven、Navicat 主要功能&#xff1a; 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及查询操作。具体界面…

virtualbox(7.0) ubuntu(22) 和win11共享文件夹

在虚拟机中安装增强功能。在virtualbox中配置 执行命令将用户加入vboxsf组 sudo adduser your_usrname vboxsf 重启ubuntu即可

docker进阶篇

docker进阶篇 (重点) 1、docker run2、docker ps3、docker restart4、docker pull5、docker stop6、docker logs7、docker stats8、docker rm(重点) 9、docker exec10、查看本机镜像docker image11、发布镜像docker commit12、docker save(例如保存为tar给别人用)13、删除镜像1…