Вырезать "4" "+" "2" из капчи

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by InfectedM, 27 Oct 2011.

  1. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    Есть картинка.
    Нужно вырезать первую и последнюю цифру.
    с удалением шумов, областями возле цифр я разобрался.
    Теперь нужно вырезать саму цифру

    Поиск первой цифры происходит так:
    Сканирую всю картинку - слева направо(сверху вниз) и если встретился столбец со всеми белыми пикселями - значит предыдущий столбец это конец первой цифры.
    и вырезаем все от начала картинки до предыдущего столба белой полосочки)
    С этим у меня все ок. Код возвращает нужный столбец.

    теперь нужно вырезать последню цифу и символ плюса.
    не стал сканировать через плюс , тк это гемор.
    Думаю проще с конца обрезать вторую цифру.
    И после всех обрезаний у нас останется плюс само собой.


    Вообщем код сканинирует картинку слева на право(сверху вниз)
    Как тольок находит столбец состоящий из всех белых пикселей , то останавливается и говорит нам номер столбца.
    с этим все ОК


    теперь хочу проделать то же самое но с конца :
    Сканируем слева на право(снизу в верху)
    По логике - нужно заменить TO на DOWNTO в двух циклах и все должно работать , но у меня не хочет.
    Помогите плиз, а то уже запутался в координатах =/


    http://zalil.ru/31944295







    PHP:
    procedure TForm1.Button1Click(SenderTObject);
    var
     
    jstolbec,kistroka:integer;
    begin
    form1
    .image2.Picture.Bitmap.LoadFromFile('test3.bmp');
     


    for 
    jstolbec:=0 to form1.Image2.Picture.Bitmap.Height-do begin
       
    if k=form1.Image2.Picture.Bitmap.Height-1 then begin
        
    break;
       
    end;
    k:=0;
          for 
    istroka:=0 to form1.Image2.Picture.Bitmap.Width-do begin
             
    if k=form1.Image2.Picture.Bitmap.Height-1 then begin
             memo1
    .Lines.Add('вся полоска белая слева , '+inttostr(jstolbec)+' ,'+inttostr(k));
             break;
             
    end//if
          
    if form1.Image2.Picture.Bitmap.Canvas.Pixels[jstolbec,istroka]=clwhite then begin
          inc
    (k);
          
    end//if
          
    end// for istroka
    end;// jstolbec



          
    k:=0;

    for 
    jstolbec:=form1.Image2.Picture.Bitmap.Height-1 downto 0 do begin
       
    if k=form1.Image2.Picture.Bitmap.Height-1 then begin
        
    break;
       
    end;
    k:=0;
          for 
    istroka:=form1.Image2.Picture.Bitmap.Width-1 downto 0 do begin
             
    if k=form1.Image2.Picture.Bitmap.Height-1 then begin
             memo1
    .Lines.Add('вся полоска белая справа , '+inttostr(jstolbec)+' ,'+inttostr(k));
             break;
             
    end//if
          
    if form1.Image2.Picture.Bitmap.Canvas.Pixels[istroka,jstolbec]=clwhite then begin
          inc
    (k);
          
    end//if
          
    end// for istroka
    end;// jstolbec



    сканирование слева показывает 13 столбец(там вся полоска белая) - все ок.
    сканирование справа показывает 20 столбец, но должен показать 12
     
    #1 InfectedM, 27 Oct 2011
    Last edited: 27 Oct 2011
  2. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Во первых надо бы выложить капч 20-40 для начала) или они все так повёрнуты(с одной цифрой)?!
    Или дать ссылку на капчу) и тогда возможно чем-то смогу помочь)))