微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 RGB 值在图像周围正确创建轮廓?

如何解决如何使用 RGB 值在图像周围正确创建轮廓?

我有一个图像要导入 Octave 5.2,我想使用 RGB 值在图像数组周围创建一个轮廓。

我无法将 RGB 值正确插入回数组,插入/生成顶部的两行、左侧的两列、右侧的两列和底部的两行。图像/转换后的 double 数组。

原始图片示例:

original

完成后我试图获得的图像示例:

final image

我的逻辑是:

  1. 将图像转换为 double 数组,以便我可以进行数学运算/将 RGB 值插入到我想要的位置。

  2. 将 RGB 值插入数组的左、右、上、下。

  3. double 数组转换回 uint8 以将其导出/查看为图像。

到目前为止我的代码

pkg load image
   
img_fn=('https://i.imgur.com/KKxJaOy.png'); %original image

f=imread(img_fn);
[im_r im_c]=size(f);
size_min=min(im_r,im_c); %get minum size from row and col
    
f_double=double(f); %need to convert to double to do math functions on it
    
outline_left_of_Box=repmat(255,[rows(f_double),2]); %Create left line array of outline red Box
f_double_tmp_red(:,:,1)=[outline_left_of_Box,f_double];%Create left line of outline red Box

red_outline_right_of_Box=repmat(255,2]); %Create right line array of outline red Box

red_outline_top_of_Box=repmat(255,[2,columns(f_double)]); %Create top line array of outline red Box

red_outline_bottom_of_Box=repmat(255,columns(f_double)]); %Create bottom line array of outline red Box
    
%convert back to image
red_outline_img=uint8(f_double);

imshow(red_outline_img);  %used to show image in octave plot window

请注意:我正在将图像数组转换为 double,因为将在数组上进行计算以获得图像周围所需的颜色框,但我只是想获取插入的 RGB 值进入数组问题首先修复。

解决方法

也许将输入图像的内部部分简单地粘贴到一些具有所需边框颜色的“背景”图像上可能更容易,如下所示:

pkg load image

% Read image,get dimensions,convert to double
f = imread('https://i.imgur.com/KKxJaOy.png');
[im_ro,im_co,im_ch] = size(f);
f_double = double(f);

% Set up width and color of border
bw = 2;
color = ones(1,1,im_ch);
color(1,:) = [255,0];

% Create image of same size as input with solid color,and paste inner part of input
red_outline_img = ones(im_ro,im_ch) .* color;
red_outline_img(bw+1:end-bw,bw+1:end-bw,:) = f_double(bw+1:end-bw,:);
red_outline_img = uint8(red_outline_img);
imshow(red_outline_img);

这就是输出:

Output

,

您可以尝试的另一件事是按照您的建议绘制线条,这可以通过巧妙地使用 xlim/ylim 来非常有效地完成,然后将整个内容作为 -RGBImage 打印到以图像形式取回。

这里唯一的警告是,您需要使用格式选项来获得您真正想要的(例如,如果您想要更高或更低的分辨率),因为您实际上正在打印屏幕上的内容点。

例如

L = imread('leaf.png');
imshow(L)
hold on
plot( [xlim,fliplr(xlim);xlim,xlim],[ylim,ylim;fliplr(ylim),ylim],'r','linewidth',2 )
hold off
set( gca,'position',[0,1] );
set( gcf,'paperposition',1] );
R = print( '-RGBImage' );
close
imshow(R); set( gcf,'color','k'); axis off

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。