一个简单的matlab编程问题,进行图像切割。

对于一幅竖条幅,先转换成灰度图像,再进行灰度反转(变成白底黑字),然后扫描每一行,如果出现有一行的像素值全部为255(即全部为白色,没有字),则标记这一行。得到所有的标记行之后,将每个标记行之间的图像切割出来,大神帮我看看应该怎么写。(用来切割一个竖条幅中的每个字,虽然这个方法没法对上下结构的汉字进行处理)

fn = 'tf.jpg';
p = imread(fn);
r = rgb2gray(p);
g = im2bw(p);
[m,n] = size(g);
sm = sum(g,2);
fr = []; tt = [];
for k = 1:m-1
    if sm(k)==0 && sm(k+1)>0
        fr = [fr k];
    else
       if sm(k)>0 && sm(k+1)==0
           tt = [tt k];
       end
    end
end
% 预览(可放大来观察)
ct = length(fr);
figure(1)
for k = 1:ct
    dz{k} = g(fr(k):tt(k),:);
    subplot(ct,1,k);
    imshow(dz{k});
    title(num2str(k));
    axis off
end
% 考虑到通用性,汉字大小不一,人工干预可以提高代码的效率
del = input('请输入需要向后合并的图片序号(如:[1 4 6 11 12]): ')
if ~isempty(del)
    fr(del+1) = [];
    tt(del) = [];
end
ct = length(fr);
figure(2)
for k = 1:ct
    dz{k} = r(fr(k):tt(k),:);
    subplot(ct,1,k);
    imshow(dz{k});
    axis off
end

温馨提示:答案为网友推荐,仅供参考
相似回答