MATLAB ButtonDownFcn

Ofi*_* A. 1 matlab user-interface matlab-deployment

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

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

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

提前致谢.

gno*_*ice 11

解决你的两个问题:

  1. 我猜你想设置'ButtonDownFcn'的的数字窗口,这将不工作,你如何期望.如果您想在用户点击的图像上做一些事情,你应该确保你设置'ButtonDownFcn'的的形象,而不是图窗口或轴对象.请注意图属性文档中的这一行(由我添加的重点):

    在指针位于图形窗口中时按下鼠标按钮但不在子对象(即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'));
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,图像内部和外部的单击是如何显示不同的消息,因为每个消息都调用'ButtonDownFcn'另一个对象.另请注意,如果单击其中一个轴的刻度线标签,则不显示任何内容.这是因为axes对象有自己的'ButtonDownFcn',没有设置为任何东西.

  2. 如果您可以访问图像处理工具箱,则可以使用IMFREEHAND功能用户在图像中绘制ROI(感兴趣区域).然后,您可以使用该createMask方法创建图像的二进制掩码,其中ROI内的像素为1,ROI外的像素为零.