我正在尝试获取图像的连接组件,然后为每个连接的组件运行ocr
。这是我的代码 -
clc
image=imread('im.png');
image=imcomplement(image);
[imx imy]=size(image);
n1=zeros(imx,imy);
symb=zeros(imx,imy);
lin=zeros(imx,imy);
L = bwlabel(image,8) ;%Calculating connected components
mx=max(max(L));
for i=1:mx
[r,c] = find(L==i);
n1=zeros(imx,imy);
rc = [r c];
[sx sy]=size(rc);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
n1(x1,y1)=1;
end
figure,imshow(n1);title('components');
r = ocr(n1,'TextLayout','Word')
n=strtrim(r.Text);
end
这是我输入的图像 -
我得到的一个连接组件是 -
当我在最后一行显示组件时,我得到了这个。但是在下一行我没有得到这个组件的ocr的任何结果。所以我的问题是为什么我没有得到ocr
这个组件而所有其他组件都在ocr
中给出了一些结果。
如果代替im.png
我在代码的第一行使用此组件作为输入 - 我得到了一个ocr。为什么会发生这种情况?
编辑 - 如果我使用此组件作为输入,我会得到ocr。
答案 0 :(得分:0)
我不知道你想要达到什么目的(你的帖子里不是很清楚)。但如果你想要的是提取化学式中的字母,下面的代码就可以了。
I = imread('6oua6.png');
s = regionprops(~I,{'BoundingBox'});
for ii=1:numel(s)
bb = s(ii).BoundingBox;
if bb(4)<30 % enforce a limit to discard non-letters
ocr(I,s(ii).BoundingBox, 'TextLayout', 'Block' )
rectangle('Position',s(ii).BoundingBox+[-1 -1 2 2 ],'Edgecolor','y')
pause
end
end
ocr将正确识别字母(至少从您提供的图像中)。 将它们进一步绑定只需要您构建一些规则。
享受。