boas pessoal, precisava de uma ajuda para detectar códigos de barras EAN13 e não consigo, tenho o código que detecta códigos de barras dos USA(12 digitos) e não consigo fazer as alterações para funcionar com o código de barras do tipo EAN13.
código:
clear all;
close all;
I = imread('barcode1.jpg');
I2 = im2bw(I, 0.75); %convert to binary
bi = ~I2; %invert
figure(1);
imshow(bi)
bi2 = imcrop; %crop desired section of barcode to be processed
hist = sum(bi2,1); %sum the columns
rows = size(bi2,1); %image size values to be used later
columns = size(bi2,2);
for i=1:columns
if((hist(i)/rows)>=0.6) %threshold the columns
bi2(:,i)=1;
else
bi2(:,i)=0;
end
end
count = 0;
index=1;
for i=1:columns-1 %run length encoding of the image
if((bi2(1,i) ~= bi2(1,i+1)))
rle(index)=count;
count=0;
index=index+1;
else
count=count+1;
end
end
scale = max([rle(2) rle(3) rle(4)]); %pick the biggest value of '1 1 1' start code
for j=1:size(rle,2)
x=rle(j)/scale; %scale everything by the biggest '1'
if((x>0) && (x<1.5)) %choose the upc code value from these different bins
Pergunta
BS29
boas pessoal, precisava de uma ajuda para detectar códigos de barras EAN13 e não consigo, tenho o código que detecta códigos de barras dos USA(12 digitos) e não consigo fazer as alterações para funcionar com o código de barras do tipo EAN13.
código:
clear all;
close all;
I = imread('barcode1.jpg');
I2 = im2bw(I, 0.75); %convert to binary
bi = ~I2; %invert
figure(1);
imshow(bi)
bi2 = imcrop; %crop desired section of barcode to be processed
hist = sum(bi2,1); %sum the columns
rows = size(bi2,1); %image size values to be used later
columns = size(bi2,2);
for i=1:columns
if((hist(i)/rows)>=0.6) %threshold the columns
bi2(:,i)=1;
else
bi2(:,i)=0;
end
end
count = 0;
index=1;
for i=1:columns-1 %run length encoding of the image
if((bi2(1,i) ~= bi2(1,i+1)))
rle(index)=count;
count=0;
index=index+1;
else
count=count+1;
end
end
scale = max([rle(2) rle(3) rle(4)]); %pick the biggest value of '1 1 1' start code
for j=1:size(rle,2)
x=rle(j)/scale; %scale everything by the biggest '1'
if((x>0) && (x<1.5)) %choose the upc code value from these different bins
rle(j) = 1;
elseif((x>=1.5) && (x<=3))
rle(j) = 2;
elseif((x>3) && (x<=4))
rle(j) = 3;
elseif((x>4))
rle(j) = 4;
end
end
invalid = 0; %invalid flag
if(isequal([rle(2) rle(3) rle(4)],[1 1 1])==0 || isequal([rle(58) rle(59) rle(60)],[1 1 1])==0)
invalid = 1; %make sure the code stops and starts as it should
end
ri = [5 9 13 17 21 25 34 38 42 46 50 54]; %array of starting positions of 4-digit codes
zero_code = [3 2 1 1]; %the codes that correspsond to numbers
one_code = [2 2 2 1];
two_code = [2 1 2 2];
three_code = [1 4 1 1];
four_code = [1 1 3 2];
five_code = [1 2 3 1];
six_code = [1 1 1 4];
seven_code = [1 3 1 2];
eight_code = [1 2 1 3];
nine_code = [3 1 1 2];
for i=1:12 %check our encoded array and match the codes to digits
check = [rle(ri(i)) rle(ri(i)+1) rle(ri(i)+2) rle(ri(i)+3)];
if(isequal(check, zero_code)==1)
code(i)=0;
elseif(isequal(check, one_code)==1)
code(i)=1;
elseif(isequal(check, two_code)==1)
code(i)=2;
elseif(isequal(check, three_code)==1)
code(i)=3;
elseif(isequal(check, four_code)==1)
code(i)=4;
elseif(isequal(check, five_code)==1)
code(i)=5;
elseif(isequal(check, six_code)==1)
code(i)=6;
elseif(isequal(check, seven_code)==1)
code(i)=7;
elseif(isequal(check, eight_code)==1)
code(i)=8;
elseif(isequal(check, nine_code)==1)
code(i)=9;
else
code(i)=111;
invalid = 1;
end
end
figure(2) %display the result
imshow(bi2)
if(invalid==1)
text((columns/2), (rows-15), 'INVALIDO', 'FontSize', 16, 'BackgroundColor',[1 1 1], 'HorizontalAlignment', 'center')
else
str = int2str(code);
text((columns/2), (rows-15), str, 'FontSize', 12, 'BackgroundColor',[1 1 1], 'HorizontalAlignment', 'center')
end
**********************************************************+
funciona se ler a imagem com código de barras dos USA, se alguém me puder ajudar nas alterações agradecia
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.