我可以在一个图像RGB像素值转换成字母吗?
12个视图(30天)
显示旧的评论
接受的答案
沃斯
2022年3月24日
编辑:沃斯
2022年3月24日
我不确定这是你要的,但如果不是,也可能包含一些有用的东西。它只是以字母标记每个像素根据像素的颜色。
%’类的名字:
类=“WRGBO”;
%对应的颜色:
颜色= uint8 ([…
255 255 255;…白色(W)
255 0 0;…红色(右)
255年0 0;…绿色(G)
0 0 255;…蓝色(B)
255 128 0;…橙色(O)
]);
%创建一个随机MxNx3 uint8 RGB图像组成的只有5种颜色:
M = 10;
N = 7;
我=重塑(排列(颜色(randi (5 M * N 1):), [1 3 2]), [M N 3]);
imshow (im);
%现在,考虑到图像,发现该指数在“颜色”的颜色
%像素(1 - >白色,2 - >红色,3 - >绿色,4 - >蓝色,5 - >橙色):
[~,idx] = ismember(重塑(im, [M * N 3]),颜色,“行”);
idx =重塑(idx, M, N)
%和指数“类”的指数矩阵:
pixel_classes =类(idx)
%最后创建一个文本集中在每个像素,像素标签:
(X, Y) = meshgrid (1: N, 1: M);
arrayfun (@ (x, y)文本(x, y, pixel_classes (y, x)…
“HorizontalAlignment”,“中心”,“VerticalAlignment”,“中间”),X, Y);
0评论
答案(1)
为副总经理
2022年3月24日
编辑:为副总经理
2022年3月25日
我不确定这就是你,但你可以用不同的方法生成图像的文本。记住,麦根输入,输出将至少M * glyphheight x N * glyphwidth。这意味着输出可能会相当大。这也意味着,人物的比例会影响图像中物体的长宽比。
计算机视觉的工具箱insertText(),可以将文本插入一个光栅图像。你必须找到一个方法处理对齐和放置。人物一般是大型和方阵。
有许多text-to-image工具文件交换。
MIMT
有
textim ()
,这是建立在使用遗留点阵字体和一些强调创造紧凑的图像文本。Textim()可以创建文本的小于insertText ()。
假设我们有一个5 x5图像是用一个已知colormap:
inpict = imread (“mappict.png”);% RGB图像
提出= hsv (6);%用于创建地图上面的图像
inpict = rgb2ind (inpict提出)+ 1;
类= {“一个”,“B”,“C”,' D ',“E”};
intext =重塑([类{inpict。'}), fliplr(大小(inpict)))。
%建立的文本
问=大小(intext, 1);
outpict ={问1};
为n = 1:问
% outpict {n} = textim (intext (n:),“micronum”);% 5 x4字体
% outpict {n} = textim (intext (n:),”惠普- 100 x - 8×8 ');% 8×8字体
outpict {n} = textim (intext (n,:)“美国慧智公司- 700 b”);% 32 x16字体
结束
%将它们合并为一个数组
outpict = imstacker (outpict,“重力”,' w ',“填充”0,“暗”1);
% wyse - 700 b是一个两层高的字体,所以它可以新广场
%不做任何字体不是两层高的!
outpict = imresize (outpict,大小(outpict, - 1) / 2大小(outpict, 2)),“最近的”);
%添加一些填充边缘
outpict = addborder (outpict 5);
imshow (outpict)
较小的图像使用的hp - 100 x - 8×8的字体在本地解决
大图使用美国慧智公司- 700 b的字体一半原生垂直分辨率。
你提到的输出应该是RGB。如果有一些彩色化,你必须描述应该是什么。,是一个单通道图像的输出。你总是能做一些事:
inpict = imread (“mappict.png”);% RGB图像
提出= hsv (6);%用于创建地图上面的图像
indpict = rgb2ind (inpict提出)+ 1;
类= {“一个”,“B”,“C”,' D ',“E”};
intext =重塑([类{indpict。'}), fliplr(大小(indpict)))。
%建立的文本
问=大小(intext, 1);
outpict ={问1};
为n = 1:问
% outpict {n} = textim (intext (n:),”惠普- 100 x - 8×8 ');% 8×8字体
outpict {n} = textim (intext (n,:)“美国慧智公司- 700 b”);% 32 x16字体
结束
%将它们合并为一个数组
outpict = imstacker (outpict,“重力”,' w ',“填充”0,“暗”1);
% wyse - 700 b是一个两层高的字体,所以它可以新广场
%不做任何字体不是两层高的!
outpict = imresize (outpict,大小(outpict, - 1) / 2大小(outpict, 2)),“最近的”);
%颜色应用到输出图像
colorpict = repelem (1) inpict 16 16日;%使用当前字符大小
outpict = im2double (colorpict)。* outpict;
%添加一些填充边缘
outpict = addborder (outpict 5);
imshow (outpict)
或者你可以反转前的图像组成: