制作自己的具有透明化背景的电子版签名
本文教你如何将自己的手写体转换为具有透明化背景的电子版,可以用手机摄像头拍摄,用此程序处理,相当于扫描仪哟。需要工具: 可拍照的电子产品、matlab。
先给出效果图:
图1 电脑前置摄像头拍摄的手写体照片
图2 matlab二值化处理后的结果(自动提取边界)
图3 插入word后的效果(背景为透明)
下面给出具体步骤(以上图为例,其中原始手写体图片名为:wdbk.png):
1. 将要处理的照片(以wdbk.png为例)放入matlab当前工作目录,并新建一个.m文件(matlab文件),命名为:getSome.m,然后将如下代码Copy进去,保存。
function [ ] = getSome( fileName, threshold )
%% ----------利用二值化功能处理不清楚的图像------------
% -------------------获得电子版的手写体---------------------
% Input:
% fileName:图像全名,如 '1.jpg',单引号不能丢
% threshold:二值化分割阈值,取值范围:(0,1)
% 使用方法:
% 以对照片:'wdbk.png'处理为例
% getSome( 'wdbk.png', 0,54 )
%
% OR
% getSome( 'wdbk.png' )
% 使用默认阈值:0.5
% ------------------------2013/7------------------------------
% ------------------------liuzhi------------------------------
clc;close all;
%% 判断interval输入的有效性
if ~exist('threshold','var') || threshold >= 1 || threshold <=0;
disp('阈值使用默认值0.5,但效果可能不好,请自行调整!');
threshold = 0.5;
end
I=imread(fileName); % 读入图片并存入矩阵 I
imshow(I); % 显示读入的原始图片
BW=im2bw(I,threshold); % 二值化处理,并存入BW
figure
imshow(BW); % 显示二值化处理后的图片
[H,W]=size(BW);
%% 自动确定上下左右边界
[row,col] = find(BW ==0);
rs=min(row)-1;cs=min(col)-1;
HN = max(row)-min(row)+1;
WN = max(col)-min(col)+1;
RBW = ones(HN,WN);
for i=1:HN
for j=1:WN
if BW(i+rs,j+cs)==0
RBW(i,j)=0;
end
end
end
%% 显示及保存
figure
imshow(RBW); % 显示提取上下边界后的二值化图片结果
% 将处理好的图片以透明背景保存为名为 result_of_fileName
% 其中fileName为原始图片名,即以 result_of_为前缀保存
imwrite(RBW,['result_of_',fileName],'PNG','Transparency',1);
end
2. 在命令窗口输入:getSome( 'wdbk.png', 0,54 )回车即可出现如上图2所示的效果,同时会在当前目录生成result_of_wdbk.png,如下图中的红线所示。注:需要根据不同的图片选择不同的阈值,请看代码注释部分。
图4 电子版的手写体被自动保存
图5 透明背景的电子版手写体(即result_of_wdbk.png)
3. 然后你就可以把result_of_wdbk.png图片插入到文章的任意地方(注意修改图片的布局方式呦)。效果图如上图3所示。
准备做个Android应用,利用手机或平板即可实现扫描仪等功能,从此再也不用去复印店里扫描了!哈哈。
欢迎交流,转载请注明出处!