如何在matlab中获取用户徒手输入?
How to get user freehand input in matlab?
我正在尝试编写一个手写识别软件,需要用户输入。我可以成功地使用 imfreehand(带参数,closed = 0)函数让用户在空白绘图轴上书写。但是,我有两个问题:
- 无法控制线条的粗细
- 我无法将涂鸦转换成图像
我需要做 2,因为,我会将笔迹与库中存储的训练图像进行比较。
关于如何克服这些或任何替代方案的任何想法?
谢谢。
要先回答你的第二个问题,你可以使用getframe
。这是一个最小的例子:
% --- Free hand drawing
imfreehand('closed', 0);
% --- Get the image
axis off
F = getframe;
Img = F.cdata;
% --- Display the image
figure
imshow(Img);
然后,要回答您关于线条粗细的第一个问题,就有点棘手了。您必须获得曲线的坐标,plot
它具有所需的厚度,然后使用 getframe
.
由于背景颜色和轴刻度,使应用程序的所有内容都变得干净有点复杂,但这里是一个尝试:
clf
xl = get(gca, 'Xlim');
yl = get(gca, 'Ylim');
h = imfreehand('closed', 0);
% --- Get the curve coordinates
C = get(h, 'Children');
pos = C(5).Vertices;
% --- Re-plot the curve with a thick line
clf
plot(pos(:,1), pos(:,2), 'k', 'Linewidth', 5);
xlim(xl);
ylim(yl);
% --- Get the image
F = getframe;
Img = rgb2gray(F.cdata);
Img(Img>0) = 255;
% --- Display the image
clf
imshow(Img);
希望对您有所帮助!
我正在尝试编写一个手写识别软件,需要用户输入。我可以成功地使用 imfreehand(带参数,closed = 0)函数让用户在空白绘图轴上书写。但是,我有两个问题:
- 无法控制线条的粗细
- 我无法将涂鸦转换成图像
我需要做 2,因为,我会将笔迹与库中存储的训练图像进行比较。
关于如何克服这些或任何替代方案的任何想法?
谢谢。
要先回答你的第二个问题,你可以使用getframe
。这是一个最小的例子:
% --- Free hand drawing
imfreehand('closed', 0);
% --- Get the image
axis off
F = getframe;
Img = F.cdata;
% --- Display the image
figure
imshow(Img);
然后,要回答您关于线条粗细的第一个问题,就有点棘手了。您必须获得曲线的坐标,plot
它具有所需的厚度,然后使用 getframe
.
由于背景颜色和轴刻度,使应用程序的所有内容都变得干净有点复杂,但这里是一个尝试:
clf
xl = get(gca, 'Xlim');
yl = get(gca, 'Ylim');
h = imfreehand('closed', 0);
% --- Get the curve coordinates
C = get(h, 'Children');
pos = C(5).Vertices;
% --- Re-plot the curve with a thick line
clf
plot(pos(:,1), pos(:,2), 'k', 'Linewidth', 5);
xlim(xl);
ylim(yl);
% --- Get the image
F = getframe;
Img = rgb2gray(F.cdata);
Img(Img>0) = 255;
% --- Display the image
clf
imshow(Img);
希望对您有所帮助!