Matlab получает координаты мыши на изображении без щелчка (при наведении мыши)

Я некоторое время искал решение этой, казалось бы, простой проблемы: получение координат мыши по осям изображения во время движения мыши (без щелчка).

  1. Я обнаружил, что impixelinfoval делает именно это, но я не могу извлечь координаты пикселей из этого uicontrol в скрипте (они хранятся в каком-то поле?).

  2. Я также обнаружил, что ginput дает вам координаты, но только если вы нажмете.

Знаете ли вы обходной путь для одной из этих двух проблем?

Известно ли вам какое-либо решение для достижения этого с использованием функций MATLAB?


person Giulia    schedule 17.07.2014    source источник
comment
вам нужно определить обратный вызов и запросить свойство 'CurrentPoint'. См. этот ответ.   -  person Shai    schedule 17.07.2014
comment
Это работает, большое спасибо. Действительно, я обнаружил, что также получение поля «String» из uicontrol impixelinfoval дает вам координаты (хотя вам нужно извлечь их из строки).   -  person Giulia    schedule 17.07.2014
comment
не стесняйтесь публиковать полный ответ на свой вопрос в соответствии с вашими выводами, чтобы будущие пользователи SO также извлекли пользу из того, что вы только что узнали.   -  person Shai    schedule 17.07.2014
comment
Я считаю, что более надежным способом является использование обратного вызова WindowButtonMotionFcn на рисунке, тогда нет необходимости извлекать что-либо из строк или любого другого сумасшествия :) - я добавил полный ответ ниже   -  person Shaun314    schedule 17.07.2014


Ответы (1)


Посмотрите на этот обратный вызов для окна рисунка: WindowButtonMotionFcn - http://www.mathworks.com/help/matlab/ref/figure_props.html (вам нужно прокрутить приличную сумму, извините за это)

Эта функция срабатывает каждый раз, когда мышь перемещается в любом месте фигуры. Оттуда вам нужно сделать вызов, чтобы получить «CurrentPoint» оси, которую вы хотите. Если текущая точка находится в пределах оси, то вы знаете, что ваша мышь находится над осью, а текущая точка говорит вам, что это текущая точка :)

Если вы не находитесь на оси, ваш ButtonMotionFcn будет быстро существовать, и поэтому производительность не будет заметно затронута.

Преимущество этого подхода в том, что вы можете использовать его для любых осей в рамках одной и той же функции.

person Shaun314    schedule 17.07.2014