MATLAB ButtonDownFcn - PullRequest
       15

MATLAB ButtonDownFcn

1 голос
/ 28 декабря 2010

У меня есть проект «Оптическое распознавание символов» в MATLAB, и мне нужна ваша помощь:

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

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

заранее спасибо.

1 Ответ

11 голосов
/ 28 декабря 2010

Отвечая на два ваших вопроса:

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

    Выполняется всякий раз, когда вы нажимаете кнопку мыши, когда указатель находится в окне рисунка, , но не над дочерним объектом (т. Е. Uicontrol, uipanel, axes или axes child) .

    Вот почему вы должны установить '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. Если у вас есть доступ к Обработка изображенийПанель инструментов . Вы можете использовать функцию IMFREEHAND , чтобы пользователь нарисовал область интереса на изображении.Затем вы можете использовать метод createMask , чтобы создать двоичную маску изображения с единицами для пикселей внутри области интереса и нулями для пикселей за пределами области интереса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...