在屏幕上获取鼠标位置(无图)



我正在使用投影仪以一定角度的角度将某物投射到地面上。但是要在维持比例的同时做到这一点,而不要让它被基石效应扭曲,我需要找到一个同构矩阵。

我想做的是采用已知尺寸的对象(一张A4纸),然后将其放在地面上。然后单击其边缘以在屏幕上获得其位置,然后计算我的需求。

我想到了使用get(0,'Pointerlocation'),但不知道如何"单击"获得其值。也许与input(prompt)

一起使用

小澄清,我不使用此背后的图形。

如果确实没有数字,并且您正在尝试在Matlab窗口/图外以及在单独的视频应用中获得坐标,那么您可以尝试以下内容。

基本上,您可以将鼠标在屏幕上的任何地方获取倒计时,并且它将返回鼠标在蒙蒂特(Montitor)上的像素位置。您不必点击任何东西。只需确保您可以看到主MATLAB窗口,以便您知道何时移动鼠标。

function screenCoord = getCorners()
screenCoord = zeros(4,2);
for ii = 1:4
    fprintf('Move cursor to Position %d: n',ii)
    countDown()
    screenCoord(ii,:) = get(0,'PointerLocation');
end
function countDown()
fprintf('Capturing in: ');
for i = 5:-1:1
    fprintf('%d..',i);pause(1)
end
fprintf('0..n')

输出:

>> screenCoords = getCorners
Move cursor to Position 1: 
Capturing in: 5..4..3..2..1..0..
Move cursor to Position 2: 
Capturing in: 5..4..3..2..1..0..
Move cursor to Position 3: 
Capturing in: 5..4..3..2..1..0..
Move cursor to Position 4: 
Capturing in: 5..4..3..2..1..0..
screenCoords =
   113   922
   943   904
   976   356
   323   376

编辑:倒计时的替代方法是使用输入函数,只要您可以将主MATLAB窗口作为焦点保留。只需用

替换对countDown()的呼叫
input('Press Enter when ready.');

MATLAB解决此任务的最简单方法是使用图形。

我将创建一个全屏空白图:

figure('position', get(0,'screensize'))

然后使用ginput()函数记录鼠标点击位置的序列:

[x,y,buttons] = ginput(4)

这将记录当将鼠标放在"纸"角上的鼠标上时,将记录纸张的4个角点。buttons阵列告诉您单击哪个鼠标按钮。xy数组将位置保留在当前轴坐标系中。结果看起来像这样:

x =
   0.20783
   0.79309
   0.78157
   0.15484
y =
   0.72422
   0.71539
   0.27109
   0.22106
buttons =
   1
   1
   1
   1

从此坐标中您可以计算失真功能。

有关更多选项,请参见ginput()的帮助。

最新更新