图片中文字切割

%% 程序说明
% 程序功能:将图片中每个字保存为图片
% 本程序由matlab语言编写,初衷是提取五笔字根图片中的字根,用于制作anki卡片。
% 因为有些字根无法由输入法直接输入,又不想截图,无奈出此下策直接全部提取。
% 提取之前首先去噪,然后根据要获取目标的像素尺寸,构建一个模版,本程序中构建
% 的是20×20像素的模版。用这个模版去识别目标,要求识别成功时,模版四条边均有
% 一像素宽的白边,且模版内有内容。

% 如需用本程序处理其他图片,识别其他元素,需重新设置模版尺寸。

% 如需使用本程序,将代码存为.m文件,和待处理图片放在同一文件夹内,程序运行结果
% 保存在本目录下wordPic_tmp文件夹中。
%% 源程序
clear;
clc;
mkdir('wordPic_tmp');
A=imread('1.png');
% 图像去噪
denoise(A);

% 单字获取
A=imread('A.png');
imageCut(A);

%% 图像分割
function imageCut(A)
B=rgb2gray(A);
[m,n]=size(B);
wordLen=20;
pics=1;
i=1;
j=1;
lastPics=1;
while(i2)
            % 控制模版上下白边
            for m_j=loc_col:loc_col+wordLen-1
                if((B(loc_row,m_j)~=255) || (B(i,m_j)~=255))
                    return
                end
            end
            imwrite(B(loc_row:i,loc_col:loc_col+wordLen-1),['.\wordPic_tmp\',num2str(pics),'.png']);
            pics=pics+1;
            return
        end
        if((i-loc_row)>wordLen)
            return
        end
    end
else
    return 
end
end

%% 图像去噪
function denoise(A)
% 转灰度,便于处理
B=rgb2gray(A);

% m、n分别存储图片的长和宽
[m,n]=size(B);

% 噪声范围,这个噪声范围是根据图片中噪声情况定的
cl=200;
ch=254;

C=B; % 图片复制一份

% 只要图片C中还有需要处理的像素,就继续调用processing进行去噪,不断迭代
while(check(C,m,n,cl,ch))
    C=processing(C,C,m,n,cl,ch);
end

imshow(C);
% 保存灰度图片为gray.png
imwrite(C,'gray.png');

% 根据灰度图片处理情况处理彩色图片
for i=1:m
    for j=1:n
        if(C(i,j)==255)
            A(i,j,:)=[255 255 255];
        end
    end
end
% 保存彩色图片为A.png
imwrite(A,'A.png');
end
       
%% 去噪函数
function C=processing(B,C,m,n,cl,ch)
% 像素遍历
for i=1:m
    for j=1:n
        cope=true;%cope表示此像素是否可以处理,默认为可以
        if (B(i,j)>=cl) && (B(i,j)<=ch && i>1 && i1 && j=cl) && (B(i,j)<=ch && i>1 && i1 && j 
 

 

被处理图片

 图片中文字切割_第1张图片

 

运行结果展示

图片中文字切割_第2张图片

 

你可能感兴趣的:(图片中文字切割)