我有这张图片(附件),我想分段数量栏和价格列,但我不知道怎么样?!以及用什么功能帮我做到这一点?!
任何帮助都将不胜感激。谢谢
答案 0 :(得分:3)
利用输入图像的常规结构,您可以执行以下操作:
img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10; %//convert to binary mask
沿着行的像素总和显示文本行(正空白由空格分隔)
lines = bwlabel( sum( bw,2) > 1 ); %// label each line
lbw = bsxfun( @times, single(bw), lines ); %// label each line in the mask
现在我们可以忽略前8行(标题)和最后两个页脚
sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines
我们可以将文本分成列,假设间隙大至少为15像素
col = bwlabel( imfilter( single(sum(sbw,1) < 1), ones(1,15)/15, 'symmetric', 'same' ) < .9 );
计算两列选定行的边界框
st = regionprops( bsxfun(@times, sbw, col ), 'BoundingBox' );
可视化生成的边界框
figure;imshow( img, 'border','tight' );hold on;
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);
导致
考虑到边界框,裁剪是相当直接的
col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices