我想在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'中给出的位置是管理图形窗口的所有窗口的亲戚,所以它还包括灰色边框。我怎么能只相对于图形来写它们(没有灰色边框)?
答案 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);
并输出:
耶!
答案 2 :(得分:1)
上面的答案在图窗口上添加了文字。如果要修改图像本身并更改像素,以便在显示图像时获得文本,则可以使用计算机视觉工具箱中提供的insertText函数。
myimage = imread('Route of my image');
myimage = im2double(myimage);
myimage = insertText(myimage, [25 25], 'your text');
imshow(myimage)