有没有办法将matlab文本输出转换为图像文件?
例如,如果我有这样的输出:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
我可以将其转换为图片吗?就像拍摄屏幕快照一样 这个矩阵区域?
感谢。
注意:结果需要像文本输出一样对齐。 我知道如何使用不同的字体对齐。我在寻找一个 对齐数字的另一种方法。我只是在问这种可能性 拍摄快照效果。
答案 0 :(得分:2)
您可以使用msgbox功能在figure
中显示矩阵;矩阵必须用functino num2str转换为字符串,然后你必须:
HandleVisibility
设置为on
(默认设置为callback
print
将消息框图打印为图像这是实施:
% Create the message box
x=msgbox(num2str(a),'Dump of matrix a')
% Set the message box figure HandleVisibility to on
x.HandleVisibility='on'
% Find the handle of the OK pushbutton
hp=findobj(x,'style','pushbutton')
% Delete the OK pushbutton
delete(hp)
% Print the figure
print -djpeg99 image_of_a_matrix
编辑以回答有关文字的对齐的注释
在文本框中表示数字表示为字符串;即使在生成字符串时您正确对齐数字,字符串的表示也取决于所选字体。
如果您使用Monospaced font,例如Courier,Courier New,Lucida Console,您可以获得dsesired alignment。
相反,如果您使用比例字体,您将失去对齐,因为不同的字符占据不同的水平空间量。
关于上面提出的代码,您可以这样设置 Monospaced字体(例如 Courier ):
% Create the message box
x=msgbox(num2str(a),'Dump of matrix a')
% Set the message box figure HandleVisibility to on
x.HandleVisibility='on'
% Find the handle of the OK pushbutton
hp=findobj(x,'style','pushbutton')
% Delete the OK pushbutton
delete(hp)
% Get the handle of the text item
txt_h=x.Children.Children
% Change the text font
txt_h.FontName='Courier'
txt_h.FontWeight='bold'
% Print the figure
print -djpeg99 image_of_a_matrix_1
这是比例字体:
的图片这是带有等宽字体的图片:
希望这有帮助,
Qapla'
答案 1 :(得分:1)
您可以使用insertText功能将文字插入图像。
这是我的代码示例:
A = [17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9];
[n_rows, n_cols] = size(A);
%Set background color to [240, 240, 240] (light gray).
I = zeros(n_rows*24+12, n_cols*10*5+8, 3, 'uint8') + 240; %Background color
text_str = cell(n_rows, 1);
box_color = zeros(n_rows, 3) + 240; %Set box color to same as background color
text_color = repmat([125, 39, 39], n_rows, 1); %Set text color to brown.
%Fill rows of A into cell array text_str
for i = 1:n_rows
text_str{i} = sprintf('%5d', A(i, :));
end
%Set position of each of the rows.
pos_x = zeros(1, n_rows) + 4;
pos_y = (0:n_rows-1)*24 + 6;
position = [pos_x', pos_y'];
%Insert text into image I.
I = insertText(I, position, text_str, 'FontSize', 14, 'BoxColor', box_color, 'TextColor', text_color,...
'Font', 'Courier New Bold', 'BoxOpacity', 1);
figure;imshow(I);
使用不同字体的对齐文字:
应用我的解决方案来对齐没有固定宽度的文本,每个数字需要不同的坐标(总共25个协调和25个字符串)。
以下解决方案使用Arial字体:
A = [17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9];
[n_rows, n_cols] = size(A);
n_elms = numel(A);
%Set background color to [240, 240, 240] (light gray).
I = zeros(n_rows*24+12, n_cols*10*5+8, 3, 'uint8') + 240; %Background color
text_str = cell(n_elms, 1);
box_color = zeros(n_elms, 3) + 240; %Set box color to same as background color
text_color = repmat([125, 39, 39], n_elms, 1); %Set text color to brown.
%Fill rows and columns of A into cell array text_str
counter = 1;
for y = 1:n_rows
for x = 1:n_cols
text_str{counter} = sprintf('%5d', A(y, x));
counter = counter + 1;
end
end
%Set position of each of the rows and columns.
[pos_x, pos_y] = ndgrid(0:n_cols-1, 0:n_rows-1);
pos_x = pos_x(:)*10*5 + 4;
pos_y = pos_y(:)*24 + 6;
position = [pos_x, pos_y];
%Insert text into image I.
I = insertText(I, position, text_str, 'FontSize', 14, 'BoxColor', box_color, 'TextColor', text_color,...
'Font', 'Arial Bold', 'AnchorPoint','RightTop', 'BoxOpacity', 1);
figure;imshow(I);