我在MATLAB中有一个“光学字符识别”项目,我需要你的帮助:
当用户在图像上按下鼠标时如何识别? 我试图用ButtonDownFcn做这个,但即使我只是打印消息 邮件未打印。
我想让用户从图像中选择牌照。 我该怎么做并保存所选区域的像素?
提前感谢。
答案 0 :(得分:11)
解决你的两个问题:
我猜你正在尝试设置数字窗口的'ButtonDownFcn'
,这将无法达到预期效果。如果您想在用户点击图片时执行某些操作,则应确保设置图像的'ButtonDownFcn'
,而不是图形窗口或轴对象。请注意figure property documentation中的这一行(我强调):
当指针位于图形窗口中时,只要按下鼠标按钮,就会执行,但不会超过子对象(即,uicontrol,uipanel,axes或axes子)。
这就是为什么你必须为你希望它工作的每个对象设置'ButtonDownFcn'
的原因。为图形窗口设置它不会使它自动为图中的每个对象工作。这是一个为图形和图像对象设置'ButtonDownFcn'
的示例:
img = imread('peppers.png'); %# Load a sample image
hFigure = figure; %# Create a figure window
hImage = image(img); %# Plot an image
set(hFigure,'ButtonDownFcn',... %# Set the ButtonDownFcn for the figure
@(s,e) disp('hello'));
set(hImage,'ButtonDownFcn',... %# Set the ButtonDownFcn for the image
@(s,e) disp('world'));
请注意,在图像内部和外部点击会显示不同的消息,因为每个消息都会调用'ButtonDownFcn'
来查找其他对象。另请注意,如果单击其中一个轴的刻度线标签,则不显示任何内容。这是因为axes对象有自己的'ButtonDownFcn'
,它没有设置为任何东西。
如果您有权访问Image Processing Toolbox,则可以使用函数IMFREEHAND让用户在图片中绘制ROI(感兴趣的区域)。然后,您可以使用createMask
method创建图像的二进制掩码,其中ROI内的像素为1,ROI外的像素为零。