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

问题描述 投票:0回答:2

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

我想做的是拿一个已知尺寸的物体(一张A4纸)放在地上。然后单击它的边缘以在屏幕上显示它们的位置,然后计算我需要的内容。

我想过使用get(0,'Pointerlocation')但不知道如何在“点击”中获得它的价值。也许与input(prompt)结合使用?

小澄清,我没有使用这背后的数字。

matlab mouseevent
2个回答
2
投票

如果确实没有数字,并且您正在尝试获取Matlab窗口/图形之外的坐标,并且可能在单独的视频应用程序上,您可以尝试类似以下内容。

它基本上有一个倒计时,你可以让你的鼠标在屏幕上的任何地方,它将返回鼠标在监视器上的像素位置。您无需点击任何内容。只需确保您可以看到主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

编辑:倒计时的替代方法是使用输入函数,只要您可以将Main Matlab窗口保持为焦点。只需将countDown()的调用替换为

input('Press Enter when ready.');

1
投票

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

从这个坐标,你可以计算你的失真函数。

有关更多选项,请参阅help of ginput()

© www.soinside.com 2019 - 2024. All rights reserved.