MATLAB ButtonDownFcn

时间:2010-12-28 13:44:31

标签: matlab user-interface matlab-deployment

我在MATLAB中有一个“光学字符识别”项目,我需要你的帮助:

  1. 当用户在图像上按下鼠标时如何识别? 我试图用ButtonDownFcn做这个,但即使我只是打印消息 邮件未打印。

  2. 我想让用户从图像中选择牌照。 我该怎么做并保存所选区域的像素?

  3. 提前感谢。

1 个答案:

答案 0 :(得分:11)

解决你的两个问题:

  1. 我猜你正在尝试设置数字窗口的'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',它没有设置为任何东西。

  2. 如果您有权访问Image Processing Toolbox,则可以使用函数IMFREEHAND让用户在图片中绘制ROI(感兴趣的区域)。然后,您可以使用createMask method创建图像的二进制掩码,其中ROI内的像素为1,ROI外的像素为零。