Коррекция перекоса при обработке изображений — это задача оптимизации изображения. В компьютерном зрении нам нужно правильно расположить наши камеры и датчики, но это часто приводит к большим искажениям. Точно так же при сканировании сканерами иногда выравнивание почти невозможно. Благодаря этому отсканированные изображения и фотографии имеют небольшой перекос (наклон). В этой статье мы узнаем, как выполнять коррекцию перекоса при обработке изображений с помощью C#.
В этой статье должны быть раскрыты следующие темы:
- API обработки изображений с коррекцией перекоса C#
- Определить угол наклона изображения
- Автоматическая коррекция перекоса
- Автоматическая коррекция перекоса с помощью фильтра предварительной обработки
- Распознавание текста изображения с автоматической коррекцией перекоса
- Ручная коррекция перекоса
- Ручная коррекция перекоса с помощью фильтра предварительной обработки
C# API обработки изображений с коррекцией перекоса
Для исправления перекоса мы будем использовать API Aspose.OCR для .NET. API позволяет выполнять распознавание отсканированных изображений, фотографий смартфонов, снимков экрана, областей изображения и отсканированных PDF-файлов. Он позволяет сохранять распознанные текстовые результаты в популярных форматах документов.
Пожалуйста, загрузите DLL API или установите его с помощью NuGet.
PM> Install-Package Aspose.OCR
Определить угол перекоса изображения в C#
API предоставляет метод CalculateSkew(string), который вычисляет угол наклона предоставленного исходного изображения. Мы можем легко определить угол наклона текстового изображения, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Вызовите метод CalculateSkew(). Он принимает путь к изображению в качестве аргумента.
- Наконец, покажите рассчитанный угол наклона.
В следующем примере кода показано, как вычислить угол наклона изображения в C#.
// В этом примере кода показано, как вычислить угол наклона изображения.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Вычислить угол наклона
float skew = recognitionEngine.CalculateSkew("C:\\Files\\OCR\\source.png");
// Показать угол
Console.WriteLine($"Skew angle: {skew:N1}°");
Skew angle: 5.8°
Автоматическая коррекция перекоса в C#
Для автоматической коррекции перекоса мы можем включить свойство RecognitionSettings.AutoSkew в настройках распознавания, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Затем инициализируйте объект класса RecognitionSettings.
- Затем установите для свойства AutoSkew значение true.
- После этого вызовите метод RecognizeImage() с исходным изображением и объектом RecognitionSettings.
- Наконец, покажите распознанный текст.
В следующем примере кода показано, как применить автоматическую коррекцию перекоса в C#.
// В этом примере кода показано, как применить автоматическую коррекцию перекоса.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Включить автоматическое выравнивание в настройках распознавания
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.AutoSkew = true;
// Распознать изображение
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);
// Показать распознанный текст
Console.WriteLine(result.RecognitionText);
Автоматическая коррекция перекоса с фильтром предварительной обработки в C#
Кроме того, мы можем применить фильтр предварительной обработки AutoSkew для автоматической коррекции перекоса и сохранить исправленное изображение, выполнив следующие действия:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Затем инициализируйте объект класса PreprocessingFilter.
- Затем добавьте фильтр AutoSkew().
- После этого вызовите метод PreprocessImage(), чтобы применить фильтр к исходному изображению.
- Наконец, сохраните исправленное изображение.
В следующем примере кода показано, как применить автоматическую коррекцию перекоса с фильтром предварительной обработки в C#.
// В этом примере кода показано, как применить автоматическую коррекцию перекоса с помощью фильтра предварительной обработки и сохранить исправленное изображение.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Добавить фильтр выравнивания
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.AutoSkew());
// Сохранить предварительно обработанное изображение в файл
using (MemoryStream ms = recognitionEngine.PreprocessImage("C:\\Files\\OCR\\source.png", filters))
{
using (FileStream fs = new FileStream("C:\\Files\\OCR\\result.png", FileMode.Create, FileAccess.Write))
{
ms.WriteTo(fs);
}
}
Распознавание текста изображения с автоматической коррекцией перекоса в C#
Мы можем применить фильтр предварительной обработки AutoSkew и распознать текст изображения, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Затем инициализируйте объект класса PreprocessingFilter.
- Затем добавьте фильтр AutoSkew().
- Тем временем создайте экземпляр класса RecognitionSettings.
- Затем назначьте фильтры свойству PreprocessingFilters.
- После этого вызовите метод RecognizeImage() с исходным изображением и объектом RecognitionSettings.
- Наконец, покажите распознанный текст.
В следующем примере кода показано, как применить автоматическую коррекцию перекоса и распознать текст на C#.
// В этом примере кода показано, как применить автоматическую коррекцию перекоса с помощью фильтра предварительной обработки и распознать изображение.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Добавить фильтр выравнивания
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.AutoSkew());
// Добавить фильтры предварительной обработки в настройки распознавания
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.PreprocessingFilters = filters;
// Распознать изображение
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);
// Показать результаты
Console.WriteLine(result.RecognitionText);
Ручная коррекция перекоса в C#
Для ручной коррекции перекоса мы можем определить угол перекоса вручную, указав свойство SkewAngle в настройках распознавания, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Затем инициализируйте объект класса RecognitionSettings.
- Затем установите свойство SkewAngle.
- После этого вызовите метод RecognizeImage() с исходным изображением и объектом RecognitionSettings.
- Наконец, покажите распознанный текст.
В следующем примере кода показано, как применить ручную коррекцию перекоса в C#.
// В этом примере кода показано, как применить коррекцию перекоса вручную.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Вручную установите угол наклона
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.SkewAngle = 6;
// Распознать изображение
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);
// Показать результаты
Console.WriteLine(result.RecognitionText);
Ручная коррекция перекоса с помощью фильтра предварительной обработки в C#
Мы также можем определить угол наклона вручную, повернув изображение на указанный градус с помощью фильтра предварительной обработки Rotate.
Пожалуйста, следуйте инструкциям ниже, чтобы вручную применить коррекцию перекоса:
- Во-первых, создайте экземпляр класса AsposeOCR.
- Затем инициализируйте объект класса PreprocessingFilter.
- Затем добавьте фильтр Rotate().
- Тем временем создайте экземпляр класса RecognitionSettings.
- Затем назначьте фильтры свойству PreprocessingFilters.
- После этого вызовите метод RecognizeImage() с исходным изображением и объектом RecognitionSettings.
- Наконец, покажите распознанный текст.
В следующем примере кода показано, как применить ручную коррекцию перекоса с помощью фильтра предварительной обработки в C#.
// В этом примере кода показано, как применить ручную коррекцию перекоса и распознать текст изображения.
// Создайте экземпляр AsposeOcr
AsposeOcr recognitionEngine = new AsposeOcr();
// Поверните изображение на 90 градусов против часовой стрелки
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.Rotate(-90));
// Сохранение предварительно обработанного изображения в файл для целей отладки
using (MemoryStream ms = recognitionEngine.PreprocessImage("C:\\Files\\OCR\\source.png", filters))
{
using (FileStream fs = new FileStream("C:\\Files\\OCR\\result.png", FileMode.Create, FileAccess.Write))
{
ms.WriteTo(fs);
}
}
// Добавить фильтры предварительной обработки в настройки распознавания
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.PreprocessingFilters = filters;
// Распознать изображение
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);
// Показать результаты
Console.WriteLine(result.RecognitionText);
Получите бесплатную пробную лицензию
Вы можете получить бесплатную временную лицензию, чтобы попробовать Aspose.OCR для .NET без ограничений пробной версии.
Вывод
В этой статье мы узнали, как:
- выполнять OCR и распознавать текст на изображениях;
- применять фильтры и обрабатывать изображения;
- использовать настройки распознавания;
- сохраните исправленные изображения с помощью C#.
Помимо исправления перекоса при обработке изображений с помощью C#, вы можете узнать больше об Aspose.OCR для .NET API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем бесплатном форуме поддержки.