增加MATLAB屏幕截图功能
时间:2022-06-20
本文章向大家介绍增加MATLAB屏幕截图功能,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
借助Java或者Python实现截取屏幕指定矩形区域
Java实现
function outputImage=screenCapture(subRegion,outputFile)
robo = java.awt.Robot;
if ~exist('subRegion','var') || isempty(subRegion)
%获取屏幕尺寸
t = java.awt.Toolkit.getDefaultToolkit();
rectangle = java.awt.Rectangle(t.getScreenSize());
else
x=subRegion(1);
y=subRegion(2);
w=subRegion(3);
h=subRegion(4);
rectangle = java.awt.Rectangle(x,y,w,h);
end
img = robo.createScreenCapture(rectangle);
%截取矩形局域
if nargout
%转换为MATLAB矩阵
h=img.getHeight();
w=img.getWidth();
data=img.getData();
pix=data.getPixels(0,0,w,h,[]);
tmp=reshape(pix(:),3,w,h);
outputImage=zeros(h,w,3);
for ii=1:3
outputImage(:,:,ii)=squeeze(tmp(ii,:,:))';
end
end
if exist('outputFile','var')
%保存文件
filehandle = java.io.File(outputFile);
javax.imageio.ImageIO.write(img,'jpg',filehandle);
end
end
Python实现
function outputImage=screenCapture(subRegion,outputFile)
if ~exist('subRegion','var') || isempty(subRegion)
%获取屏幕尺寸
subRegion = {0, 0, ...
py.win32api.GetSystemMetrics(py.win32con.SM_CXSCREEN),...
py.win32api.GetSystemMetrics(py.win32con.SM_CYSCREEN)};
else
x=subRegion(1);
y=subRegion(2);
w=subRegion(3);
h=subRegion(4);
subRegion = {x, y, x+w, y+h};
end
img = py.PIL.ImageGrab.grab().crop(subRegion);
%截取矩形局域
if exist('outputFile','var')
%保存文件
img.save(outputFile);
end
if nargout
%转换为MATLAB矩阵
data = py.numpy.array(img).reshape(img.height*img.width*3);
img_arr=cellfun(@uint8,cell(data.data));
tmp=reshape(img_arr(:),3,w,h);
outputImage=zeros(h,w,3);
for ii=1:3
outputImage(:,:,ii)=squeeze(tmp(ii,:,:))';
end
% outputImage=outputImage/255;
end
end
对
比
Rect=[50,50,50,50];
tic
win.screenCapture(Rect);
toc
时间已过 0.065043 秒。
tic
pywin.screenCapture(Rect);
toc
时间已过 0.080278 秒。
Java实现的版本要快上一些,可能是Python在数值转化的时候耗费了一些时间
- 英伟达回应禁令:研究人员放心用不更新驱动就没影响
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出
- WCF中的Binding模型之六(完结篇):从绑定元素认识系统预定义绑定
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(57)-插件---ueditor使用
- 何为正则表达式?要他有何用?
- 向silverlight传递自定义参数
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出
- sl从程序集中读取xaml文件
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇]
- 如何解决打开VS2010后没有UI界面的问题
- RadRails1.0降临——增加Profiler、CallGraph Analyzer和Rails Shell等新特性
- Rails存储库从SVN转向Git
- 报告称10后已变成出境游“老司机”屌丝80后:我还没出过国
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 有关结构体内重载操作的最详细的讲解~~
- 洛谷 P1002 DP解法
- AtCoder Beginner Contest 163 A~~D 详细代码讲解
- HUD 4841 (vector的用法)
- c++ 优先队列(priority_queue)的详细讲解用法
- HDU 1022(关于栈的详细解法)
- count_if函数的用法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D