我正在使用投影仪以某个角度在地面上投射物体。但要做到这一点,同时保持比例,而不是让它被楔石效应扭曲,我需要找到单应矩阵。
我想做的是取一个已知尺寸的物体(一张A4纸)并将其放在地上。然后单击它的边缘以在屏幕上显示它们的位置,然后计算我需要的内容。
我想过使用get(0,'Pointerlocation')
,但不知道如何在“点击”中获取其价值。也许与input(prompt)
结合使用?
小澄清,我没有使用背后的数字。
答案 0 :(得分: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 :(得分:1)
matlab中解决此任务的最简单方法是使用数字。
我会创建一个全屏空白图:
figure('position', get(0,'screensize'))
然后使用ginput()
函数记录一系列鼠标点击位置:
[x,y,buttons] = ginput(4)
当您将鼠标放在投影图像上到“纸张”的角落时,这将记录您单击的纸张的4个角点。 buttons
数组会告诉您单击了哪个鼠标按钮。 x
和y
数组保持当前轴坐标系中的位置。结果可能如下所示:
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()
。