做好看的图片 ——加粗图片中的所有线条
有没有遇到过这种事情:写了一篇文章,还画了一个自己觉得还不错的系统示意图,很高兴的给老板看。老板看了,先是表扬了你一下,然后开始说意见了:“这个图的线条有点太细了,粗点会好看一些。那个地方弄一个倒角,比直角好看一些。”诸如等等。对你来说还有啥选择,回去改呗。
其他的问题好像都还好弄。就是把所有线条变粗比较麻烦。如果图是PPT做的,没法全选所有线条然后修改线宽,再说即使能,也只能变成一样宽。还有一些图是从AutoCAD里面导出来的,也只能一条一条来设置。当然解决方法是有的,反正有的是时间,那就一条一条设置呗,反正最多一个小时。还有更郁闷的时候,原文件都已经找不到了,只剩下最后的效果图了。要修改的话就要重做一遍了。可是假设老板还是不满意呢?对他来说只是一句话,可是每一句话就费了你宝贵的一个小时喝咖啡的时间。也许还有高端的做法吧,比如Photoshop,先膨胀然后再增加对比度等等。不过反正我是对Photoshop那么多搞不清楚功能的按钮很恐惧。
如果用MATLAB的话,解决起来还是比较容易的,代码也不复杂。为了把事情说的更清楚一些,代码再加点注释。
clear all;
clc;
inputfile = ‘Fig1.bmp’; % 输入的图像文件名,MATLAB支持的文件格式还是比较多的,所以不用担心
outputfile = ‘Fig1_2’; % 输出的文件名,可以不加后缀
outputfileformat = ‘png’; % 输出的文件格式。包含了很多常用的格式:比如’bmp’,’gif’, ‘jpg’, ‘png’, ‘tiff’等等。
thickness = 2; % 设置膨胀的宽度,越大则结果越粗
b=imread(inputfile); % 读入图像文件
b=im2bw(b); % 将图像转换成黑白二值图像
a=~b; % 黑白互换
se = strel(‘rectangle’, [thickness thickness]); % 设置一个矩形区间
bw2 = ~(imdilate(a,se)); % 处理图像
imwrite(bw2, [outputfile ‘.’ outputfileformat],outputfileformat); % 将处理好的图像写入文件
% 以下为显示处理前与处理后的图像,可以删去
figure(‘color’,’w’)
subplot(1,2,1)
imshow(b);
title(‘Before’)
subplot(1,2,2)
imshow(bw2)
title(‘after’);
这里头最重要的代码其实就2行。strel是用来设置作用元素。这里是使用了矩形的元素,因为只是为了增加像素的宽度,这里的宽度是2, 如果需要更粗,只需要增加这个数字就可以了。其实还可以定义很多样式的,比如椭圆,或者沿着某个方向等。dilate函数是对图像做膨胀操作,用的元素就是上面的strel函数设置的。
下面是对照的图:(thickness=2)
不过得先说一下,这个不是终极解决方案。因为处理的对象是黑白图形。如果是彩色的呢?呃,我也要去想想,终归是有非常省事的解决方法的。