我正在使用投影仪以一定角度的角度将某物投射到地面上。但是要在维持比例的同时做到这一点,而不要让它被基石效应扭曲,我需要找到一个同构矩阵。
我想做的是采用已知尺寸的对象(一张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
阵列告诉您单击哪个鼠标按钮。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
从此坐标中您可以计算失真功能。
有关更多选项,请参见ginput()
的帮助。