【发布时间】:2013-05-20 14:56:15
【问题描述】:
我在 MATLAB 中有一个“光学字符识别”项目,我需要您的帮助:
当用户在图像上按下鼠标时,我如何识别? 我试图用 ButtonDownFcn 做到这一点,但即使我只是打印消息 消息未打印。
我想允许用户从图像中选择车牌。 我怎样才能做到这一点并保存所选区域的像素?
提前致谢。
【问题讨论】:
标签: matlab user-interface matlab-deployment
我在 MATLAB 中有一个“光学字符识别”项目,我需要您的帮助:
当用户在图像上按下鼠标时,我如何识别? 我试图用 ButtonDownFcn 做到这一点,但即使我只是打印消息 消息未打印。
我想允许用户从图像中选择车牌。 我怎样才能做到这一点并保存所选区域的像素?
提前致谢。
【问题讨论】:
标签: matlab user-interface matlab-deployment
解决你的两个问题:
我猜您正在尝试设置 图形窗口 的'ButtonDownFcn',这不会按您的预期工作。如果您想在用户单击图像时执行某些操作,则应确保设置 图像 的 'ButtonDownFcn',而不是图形窗口或轴对象。请注意figure property documentation 中的这一行(重点由我添加):
当指针位于图形窗口中时,只要您按下鼠标按钮时执行,但不在子对象(即 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',它没有设置为任何值。
如果您有权访问Image Processing Toolbox,则可以使用函数IMFREEHAND 让用户在图像中绘制一个ROI(感兴趣区域)。然后,您可以使用createMask method 创建图像的二进制掩码,其中 ROI 内的像素为 1,ROI 外的像素为 0。
【讨论】: