Класс HolePunchFillingCommand
В этом разделе
Заполняет незаполненные отверстия (заполняет белый круг внутри дырокола черным цветом) на изображении.
Объектная модель
Синтаксис
Ремарки
Алгоритм класса обнаруживает дырочки в 4 областях исходного изображения: 1. Прямоугольник в левой части исходного изображения: point=(0; 0), width=sourceImageWith*ScanAreaWidth, height=sourceImageHeight.
2. Прямоугольник в правой части исходного изображения: point=(sourceImageWith-sourceImageWith*ScanAreaWidth ; 0), width=sourceImageWith*ScanAreaWidth, height=sourceImageHeight.
3. Прямоугольник в верхней части исходного изображения: point=(0; 0), width=sourceImageWith, height=sourceImageHeight*ScanAreaHeight.
4. Прямоугольник в нижней части исходного изображения: point=(0; sourceImageHeight-sourceImageHeight*ScanAreaHeight), width=sourceImageWith, height=sourceImageHeight*ScanAreaHeight.
Вот a "хорошая" последовательность операций обработки изображения документа.:
- Инвертировать перевернутое изображение (AutoInvertCommand)
- Очистить границу изображения (BorderClearCommand)
- Удалить полутона из изображения (HalftoneRemovalCommand)
- Устранение перекоса изображения (DeskewCommand)
- Заполнение незаполненных дыроконов из изображения (HolePunchFillingCommand)
- Удалить дыроколы из изображения (HolePunchRemovalCommand)
- Удалить линии из изображения (LineRemovalCommand)
- Инвертировать инвертированные текстовые области на изображении (AutoTextInvertCommand)
- Очистить изображение (DespeckleCommand)
- Удалить границу изображения (BorderRemovalCommand)
Свойство
RegionOfInterest можно использовать для указания интересующей области для этой команды.
Пример
Вот C#/VB.NET код, который демонстрирует, как загрузить изображение документа с диска, подготовить изображение документа для распознавания и сохранить результат в новый файл изображения.
Class DocumentCommandsExample
Public Sub ProcessImage()
' [ do not forget to set your image file path here! ]
' create an image collection
Using images As New Vintasoft.Imaging.ImageCollection()
' add image to the image collection
images.Add("Flower.jpg")
Try
Try
' for each image in image collection
For Each image As Vintasoft.Imaging.VintasoftImage In images
' invert an image if image is inverted
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.AutoInvertCommand(), image)
' clear noise on a border of the image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.BorderClearCommand(), image)
' remove halftone from the image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.HalftoneRemovalCommand(), image)
' detect the correct orientation of the image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.DeskewCommand(), image)
' remove hole punches on image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.HolePunchRemovalCommand(), image)
' remove tables on image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.LineRemovalCommand(Vintasoft.Imaging.ImageProcessing.LinesType.Tables), image)
' invert inverted text regions on an image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.AutoTextInvertCommand(), image)
' remove noise from the image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.DespeckleCommand(), image)
' remove border around the image
ExecuteCommand(New Vintasoft.Imaging.ImageProcessing.Document.BorderRemovalCommand(), image)
Next
Catch ex As Vintasoft.Imaging.ImageProcessing.ImageProcessingException
' show error message
System.Windows.Forms.MessageBox.Show(ex.Message)
Return
End Try
' save the processed image collection to a new TIFF file
images.SaveSync("processed-image.tif")
Finally
images.ClearAndDisposeItems()
End Try
End Using
End Sub
Private Sub ExecuteCommand(command As Vintasoft.Imaging.ImageProcessing.ProcessingCommandBase, image As Vintasoft.Imaging.VintasoftImage)
' subscribe to the progress event of command
AddHandler command.Progress, New System.EventHandler(Of Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs)(AddressOf command_Progress)
' execute the command
command.ExecuteInPlace(image)
' unsubscribe from the progress event of command
RemoveHandler command.Progress, New System.EventHandler(Of Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs)(AddressOf command_Progress)
End Sub
Private Sub command_Progress(sender As Object, e As Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs)
' update progress info using e.Progress property
' ...
' cancel execution of command using e.Cancel property if necessary
' ...
End Sub
End Class
class DocumentCommandsExample
{
public void ProcessImage()
{
// [ do not forget to set your image file path here! ]
// create an image collection
using (Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection())
{
// add image to the image collection
images.Add("Flower.jpg");
try
{
try
{
// for each image in image collection
foreach (Vintasoft.Imaging.VintasoftImage image in images)
{
// invert an image if image is inverted
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.AutoInvertCommand(), image);
// clear noise on a border of the image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.BorderClearCommand(), image);
// remove halftone from the image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.HalftoneRemovalCommand(), image);
// detect the correct orientation of the image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.DeskewCommand(), image);
// remove hole punches on image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.HolePunchRemovalCommand(), image);
// remove tables on image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.LineRemovalCommand(
Vintasoft.Imaging.ImageProcessing.LinesType.Tables),
image);
// invert inverted text regions on an image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.AutoTextInvertCommand(), image);
// remove noise from the image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.DespeckleCommand(), image);
// remove border around the image
ExecuteCommand(
new Vintasoft.Imaging.ImageProcessing.Document.BorderRemovalCommand(), image);
}
}
catch (Vintasoft.Imaging.ImageProcessing.ImageProcessingException ex)
{
// show error message
System.Windows.Forms.MessageBox.Show(ex.Message);
return;
}
// save the processed image collection to a new TIFF file
images.SaveSync("processed-image.tif");
}
finally
{
images.ClearAndDisposeItems();
}
}
}
void ExecuteCommand(
Vintasoft.Imaging.ImageProcessing.ProcessingCommandBase command,
Vintasoft.Imaging.VintasoftImage image)
{
// subscribe to the progress event of command
command.Progress +=
new System.EventHandler<Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs>(command_Progress);
// execute the command
command.ExecuteInPlace(image);
// unsubscribe from the progress event of command
command.Progress -=
new System.EventHandler<Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs>(command_Progress);
}
void command_Progress(object sender, Vintasoft.Imaging.ImageProcessing.ImageProcessingProgressEventArgs e)
{
// update progress info using e.Progress property
// ...
// cancel execution of command using e.Cancel property if necessary
// ...
}
}
Иерархия наследования
Требования
Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5
Смотрите также