借助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在数值转化的时候耗费了一些时间
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有