2010-12-28 5 views
1

У меня есть проект «Optical Character Recognition» в MATLAB и мне нужна ваша помощь:MATLAB ButtonDownFcn

  1. как я распознать, когда пользователь нажимает кнопку мыши на изображении? Я пытаюсь сделать это с помощью ButtonDownFcn, но даже когда я просто печатаю сообщение , сообщение не печатается.

  2. Я хочу, чтобы пользователь мог выбрать номерной знак с изображения. Как я могу это сделать и сохранить пиксели выбранной области?

благодарит заранее.

ответ

11

Адресация ваши два вопроса:

  1. Я предполагаю, что вы пытаетесь установить 'ButtonDownFcn' окна фигуры, которая не будет работать, как вы ожидаете. Если вы хотите что-то сделать, когда пользователь нажимает на изображение, вы должны убедиться, что вы устанавливаете 'ButtonDownFcn' изображения , а не окна фигуры или объекта осей. Обратите внимание, эту линию в figure property documentation (выделено мною):

    Запускает при нажатии кнопки мыши, когда указатель находится в окне фигуры, но не над дочерним объектом (т.е. UIControl, uipanel , оси или оси).

    Вот почему вы должны установить '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' для другого объекта. Также обратите внимание, что если вы нажмете на метку метки метки одной из осей, ничего не отображается. Это связано с тем, что объект осей имеет свой собственный 'ButtonDownFcn', который не был настроен ни на что.

  2. Если у вас есть доступ к Image Processing Toolbox, вы можете использовать функцию IMFREEHAND, чтобы пользователь нарисовал ROI (область интереса) на изображении. Затем вы можете использовать createMask method, чтобы создать двоичную маску изображения с единицами для пикселей внутри ROI и нулями для пикселей за пределами ROI.

 Смежные вопросы

  • Нет связанных вопросов^_^