2013-07-10 5 views
2

Ниже приведен код, которыйC# Еогеасп изображение в папке

  1. создает каталог
  2. использует MagickNet для преобразования в PDF в отдельные изображения BMP и сохраняет его в папке (ImagePath)
  3. Затем он использует TessNet2 для сканирования каждого изображения в этой папке для анализа информации

Я не могу получить цикл foreach, который сканирует папку ImagePath. Любая помощь?

Ошибка сейчас находится на заявлении «Еогеасп» и он говорит: «Не удается преобразовать тип„обугленного“до" System.Drawing.Image»

static void Main(string[] args) 
    { 
     string ImagePath = exePath + "\\Images"; 
     if (!Directory.Exists(ImagePath)) 
     { 
      Directory.CreateDirectory(ImagePath); 
     } 

     MagickReadSettings settings = new MagickReadSettings(); 
     settings.Density = new MagickGeometry(300, 300); 

     using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(@"D:\Test\ABStest.pdf",settings); 
      int page = 1; 
      foreach (MagickImage image in images) 
      { 
       image.Write(ImagePath + "\\ABS" + page + ".bmp"); 
       page++; 
      } 
     } 



     foreach (Image item in ImagePath) 
     { 
      using (Bitmap bmp = new Bitmap(item)) 
      { 
       tessnet2.Tesseract tessocr = new tessnet2.Tesseract(); 
       tessocr.Init(@"C:\Users\Matt Taylor\Documents\Visual Studio 2012\Projects\TessNet2\TessNet2\bin\Debug\tessdata", "eng", false); 
       tessocr.GetThresholdedImage(bmp, Rectangle.Empty).Save("c:\\temp\\" + Guid.NewGuid().ToString() + ".bmp"); 
       // Tessdata directory must be in the directory than this exe 
       Console.WriteLine("Multithread version"); 
       ocr.DoOCRMultiThred(bmp, "eng"); 
       //Console.WriteLine("Normal version"); 
       //ocr.DoOCRNormal(bmp, "eng"); 
      } 
     } 
    }  

ответ

2

Вам не нужен для сохранения файла на диск. Вы можете использовать метод .ToBitmap() для MagickImage.

foreach (MagickImage image in images) 
{ 
    using (Bitmap bmp = image.ToBitmap()) 
    { 
    tessnet2.Tesseract tessocr = new tessnet2.Tesseract(); 
    // etc... 
    } 
} 
+0

У меня не было понятия об этом методе. Отлично работает и делает это, поэтому мне не нужно тратить пространство на создание изображений. Благодаря! – MaylorTaylor

1

Вы циклически String ImagePath, который дает вам набор персонажей. Вам нужно искать через каталог с Directory.GetFiles() и загрузить изображения с Image.FromFile():

foreach (String itemPath in Directory.GetFiles(ImagePath)) 
{ 
    using (Image item = Image.FromFile(itemPath)) 
    { 
     ... 
    } 
} 
3

Вы можете использовать Directory.GetFiles вернуть все имена файлов в каталоге и создать свой Bitmaps оттуда

foreach (string imageFileName in Directory.GetFiles(ImagePath)) 
{ 
    using (Bitmap bmp = new Bitmap(imageFileName)) 
    { 
    } 
} 

Но если в этой папке есть другие файлы, вы должны добавить фильтр

foreach (string imageFileName in Directory.GetFiles(ImagePath, "*.jpg")) 
{ 
    using (Bitmap bmp = new Bitmap(imageFileName)) 
    { 
    } 
} 
+0

Я пропустил, что MaylorTaylor захотел растровое изображение после загрузки изображения. Фильтр тоже хорошая мысль. – TheEvilPenguin

+0

Сказал это примерно 2 часа назад :) [здесь] (http://stackoverflow.com/a/17930913/1324033) – Sayse

Смежные вопросы