Ir para conteúdo
Fórum Script Brasil

BS29

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que BS29 postou

  1. 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
×
×
  • Criar Novo...