在matlab中为图像写号码

时间:2015-09-03 14:07:32

标签: matlab text matlab-figure

我想在imshow显示的图像内的特定位置写一个数字。目前,我有:

myimage = imread('Route of my image');
myimage = im2double(myimage);

imshow(myimage)

MyBox = uicontrol('style','text');
set(MyBox,'String',mynumber);
set(MyBox,'Position',[25,25,15,15]);

我的问题是'set'中给出的位置是管理图形窗口的所有窗口的亲戚,所以它还包括灰色边框。我怎么能只相对于图形来写它们(没有灰色边框)?

3 个答案:

答案 0 :(得分:5)

您可以改用text吗?

imshow(image);
text(x,y,'your text')

答案 1 :(得分:3)

您可以按照here所述的步骤删除图中的灰色边框,以便在放置文本时获得正确的坐标。基本上获取包含图像的图形和轴的尺寸,并使图形精确地适合轴。

请注意,在指定uicontrol对象的位置时,0位置位于左边的BOTTOM,而图像内的像素坐标从TOP左侧开始。因此,您需要获取图像的尺寸,并从形成图像的行数(即第一维)中减去实际的y坐标。

以下是一个例子:

clear
clc
close all

myimage = imread('coins.png');
myimage = im2double(myimage);

imshow(myimage);

[r,c,~] = size(myimage);

%// Copied/pasted from http://www.mathworks.com/matlabcentral/answers/100366-how-can-i-remove-the-grey-borders-from-the-imshow-plot-in-matlab-7-4-r2007a
set(gca,'units','pixels'); %// set the axes units to pixels
x = get(gca,'position'); %// get the position of the axes
set(gcf,'units','pixels'); %// set the figure units to pixels
y = get(gcf,'position'); %// get the figure position
set(gcf,'position',[y(1) y(2) x(3) x(4)]);% set the position of the figure to the length and width of the axes
set(gca,'units','normalized','position',[0 0 1 1]) % set the axes units to pixels

%// Example
hold on
mynumber = 20;

%// Set up position/size of the box
Box_x = 25;
Box_y = 25;
Box_size = [15 15];
%// Beware! For y-position you want to start at the top left, i.e. r -
%// Box_y
BoxPos = [Box_x r-Box_y Box_size(1) Box_size(2)];
MyBox = uicontrol('style','text','Position',BoxPos);

set(MyBox,'String',mynumber);

并输出:

enter image description here

耶!

答案 2 :(得分:1)

上面的答案在图窗口上添加了文字。如果要修改图像本身并更改像素,以便在显示图像时获得文本,则可以使用计算机视觉工具箱中提供的insertText函数。

myimage = imread('Route of my image');
myimage = im2double(myimage);

myimage = insertText(myimage, [25 25], 'your text');
imshow(myimage)