Matlab buttondownfcn
-
13-10-2019 - |
Вопрос
У меня есть проект «Оптического распознавания персонажей» в Matlab, и мне нужна ваша помощь:
Как я могу распознать, когда пользователь нажимает на мышь на изображении? Я пытаюсь сделать это с Buttondownfcn, но даже когда я просто печатаю сообщение, сообщение не напечатано.
Я хочу позволить пользователю выбрать номерной знак из изображения. Как я могу сделать это и сохранить пиксели выбранной области?
заранее спасибо.
Решение
Обращаясь к двум вашим вопросам:
Я предполагаю, что вы пытаетесь установить
'ButtonDownFcn'
принадлежащий фигура окна, что не сработает, как вы ожидаете. Если вы хотите что -то сделать, когда пользователь нажимает на изображение, вы должны убедиться, что вы настраиваете'ButtonDownFcn'
принадлежащий изображение, а не окно фигуры или объект оси. Обратите внимание на эту линию в Рисунок документация о свойстве (Акцент добавлен мной):Выполняется всякий раз, когда вы нажимаете кнопку мыши, пока указатель находится в окне фигуры, но не над детским объектом (то есть, 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'
для другого объекта. Также обратите внимание, что если вы нажмете на метку Tick Mark по одной из оси, ничего не отображается. Это потому, что у объекта Axes есть свой собственный'ButtonDownFcn'
, который не был на что -либо.Если у вас есть доступ к Набор инструментов обработки изображений Вы можете использовать функцию Imfreehand Чтобы пользователь рисовал ROI (область интереса) на изображении. Тогда вы можете использовать
createMask
метод Чтобы создать бинарную маску изображения с пикселями внутри ROI и нулей для пикселей за пределами рентабельности.