Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VB2008 Inhalt aus gescannter PDF TIF erkennen

Frage Entwicklung VB for Applications

Mitglied: 69304

69304 (Level 1)

25.02.2010, aktualisiert 10:56 Uhr, 5639 Aufrufe, 5 Kommentare

Hallo Leute!

Besteht die Möglichkeit, aus einem gescannten Dokument (liegt im PDF- oder TIF-Format vor) einen Bereich "einzulesen" und dann anhand diesem Bereich (falls dieser z.B. schwarz ausgemalt ist) einen Rückgabewert zu erzeugen in Form eines Bool-Wertes?



Es geht um eine Workflow-Programmierung.

User sollen auf einem Blatt Papier Kästchen "anmalen" können und über einen MFP-Kopierer in ein Verzeichnis scannen können.

Die PDF oder TIF soll dann von dem VB-Programm verarbeitet werden und dann z.B. irgendwelche SQL- oder Copy-Anweisungen ausgeführt werden.
Mitglied: RedWraith
04.03.2010 um 13:50 Uhr
Hi !

Ein TIF Format ist doch eine Bilddatei oder ?

Die könnte man in VB.NET einlesen und dann könnte man auf dem so erzeugten Bitmap eine Art Bilderkennung laufen lassen.

Ein Codebeispiel kann ich dir leider nicht liefern, aber das Schwierigste daran dürfte sein, die Kästchen auf dem Bild
zu "finden". Aber ich bin sicher, dass es dafür irgendwo eine Art Algorythmus gibt. Wenn du weißt, wo sich die Kästchen
befinden, musst du nurnoch prüfen, ob Sie ausgemalt sind.

Dafür müsste man eigendlich nur den Bildbereich, in dem ein Kästchen gefunden wurde, darauf überprüfen,
ob der Großteil des Bildbereichs Schwarz, bzw. Nicht-Weiß ist.

Natürlich hängt das davon ab, wie gut die eingescannte Qualität ist, ich stelle mir vor, dass bei einem reinen
S/W Scan das Ganze deutlich einfacher ist, als bei einer hochauflösenden Farbkopie.

Achja, von der PDF für ich dir abraten. PDFs sind eigendlich als Eyes-Only gedacht und lassen sich so gut wie garnicht
maschinell bearbeiten.
Bitte warten ..
Mitglied: 69304
04.03.2010 um 14:07 Uhr
Ein TIF Format ist doch eine Bilddatei oder ?
Jupp.

Die könnte man in VB.NET einlesen und dann könnte man auf dem so erzeugten Bitmap eine Art Bilderkennung laufen lassen.
Ja hat vielleicht jemand hier sowas?!?

Dafür müsste man eigendlich nur den Bildbereich, in dem ein Kästchen gefunden wurde, darauf überprüfen,
ob der Großteil des Bildbereichs Schwarz, bzw. Nicht-Weiß ist.

Natürlich hängt das davon ab, wie gut die eingescannte Qualität ist, ich stelle mir vor, dass bei einem reinen
S/W Scan das Ganze deutlich einfacher ist, als bei einer hochauflösenden Farbkopie.
Genau so habe ich es mir vorgestellt!
Bitte warten ..
Mitglied: RedWraith
04.03.2010 um 14:49 Uhr
Ich werd mich mal schlau machen. Ich kenne jemanden,
der hat mit komplexeren Algorythmen direkt zu tun, mal sehen, was der sagt.

EDIT: Besagte Person ist im Urlaub. Pech.

EDIT2: Ich hab ein Tutorial gefunden, ist aber nicht ganz ohne: http://rn-wissen.de/index.php/Bildverarbeitung_Tutorial
Bitte warten ..
Mitglied: 69304
29.03.2010 um 08:19 Uhr
Hmm.. Danke erstmal.

Aber das Bild ist schon schwarz/weiss. Das ist nicht das Problem.


Das Problem liegt eher darin, wie ich in VB2008 das Bild in einem Programmteil "erkennen" lasse, bzw. "einlese".
Bitte warten ..
Mitglied: 69304
01.04.2010 um 16:49 Uhr
Ich habs

Bin eigentlich eher durch Zufall darauf gestoßen

Wenn jemand interesse hat, kann ich ihm das komplette Paket als Zip zuschicken.


Aber hier zumindest mal ein Denkanstoß, falls jmd das selbe Problem hat:

Benötigt wird:

- Form1
- Label1
- Label2
- Label3
- PictureBox1

01.
Imports System.Drawing.Imaging 
02.
Imports System.Runtime.InteropServices 
03.
 
04.
Public Class Form1 
05.
    Private bm As Bitmap 
06.
 
07.
    Protected Sub SetIndexedPixel(ByVal x As Integer, ByVal y As Integer, ByVal bmd As BitmapData, ByVal pixel As Boolean) 
08.
        Dim index As Integer = y * bmd.Stride + (x >> 3) 
09.
        Dim p As Byte = Marshal.ReadByte(bmd.Scan0, index) 
10.
        Dim mask As Byte = &H80 >> (x And &H7) 
11.
        If pixel Then 
12.
            p = p Or mask 
13.
        Else 
14.
            p = p And CByte(mask ^ &HFF) 
15.
        End If 
16.
        Marshal.WriteByte(bmd.Scan0, index, p) 
17.
    End Sub 'SetIndexedPixel 
18.
 
19.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
20.
        Dim X As Integer = 0 
21.
        Dim Y As Integer = 0 
22.
        Dim Schwellwert As Integer = 200 
23.
        Dim Farbe As Color 
24.
        Dim Wert1 As Integer = 0 
25.
        Dim Wert2 As Integer = 0 
26.
        Dim Wert1Check As Boolean = False 
27.
        Dim Wert2Check As Boolean = False 
28.
 
29.
        Dim ofd As New OpenFileDialog 
30.
        ofd.InitialDirectory = "C:\Temp" 
31.
        ofd.Filter = "JPG (*.jpg)|*.jpg| BMP (*.bmp)|*.bmp" 
32.
        ofd.Title = "Wählen Sie eine Datei zum Öffnen aus" 
33.
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then 
34.
 
35.
            Dim img As Bitmap = CType(Image.FromFile(ofd.FileName), Bitmap) 
36.
            'Ensure that it's a 32 bit per pixel file 
37.
            If img.PixelFormat <> PixelFormat.Format32bppPArgb Then 
38.
                Dim temp As New Bitmap(img.Width, img.Height, PixelFormat.Format32bppPArgb) 
39.
                Dim g As Graphics = Graphics.FromImage(temp) 
40.
                g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel) 
41.
                img.Dispose() 
42.
                g.Dispose() 
43.
                img = temp 
44.
            End If 
45.
            Me.PictureBox1.Image = img 
46.
            'lock the bits of the original bitmap 
47.
            Dim bmdo As BitmapData = img.LockBits(New Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, img.PixelFormat) 
48.
 
49.
            'and the new 1bpp bitmap 
50.
            bm = New Bitmap(Me.PictureBox1.Image.Width, Me.PictureBox1.Image.Height, PixelFormat.Format1bppIndexed) 
51.
            Dim bmdn As BitmapData = bm.LockBits(New Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed) 
52.
 
53.
            'scan through the pixels Y by  
54.
            For Y = 0 To img.Height - 1 
55.
                For X = 0 To img.Width - 1 
56.
                    'generate the address of the colour pixel 
57.
                    Dim index As Integer = Y * bmdo.Stride + X * 4 
58.
 
59.
                    'check its brightness 
60.
                    If Color.FromArgb(Marshal.ReadByte(bmdo.Scan0, index + 2), Marshal.ReadByte(bmdo.Scan0, index + 1), Marshal.ReadByte(bmdo.Scan0, index)).GetBrightness() > 0.5F Then 
61.
                        Me.SetIndexedPixel(X, Y, bmdn, True) 'set it if its bright. 
62.
                    End If 
63.
                Next X 
64.
            Next Y 
65.
 
66.
            'tidy up 
67.
            bm.UnlockBits(bmdn) 
68.
            img.UnlockBits(bmdo) 
69.
 
70.
            'display the 1bpp image 
71.
            Me.PictureBox1.Image = bm 
72.
 
73.
 
74.
            For Y = 200 To 280 Step 1 
75.
                For X = 150 To 220 Step 1 
76.
                    Farbe = bm.GetPixel(X, Y) 
77.
                    If Farbe.Name = "ff000000" Then 
78.
                        Wert1 += 1 
79.
                    End If 
80.
                Next X 
81.
            Next Y 
82.
 
83.
            For Y = 300 To 360 Step 1 
84.
                For X = 150 To 220 Step 1 
85.
                    Farbe = bm.GetPixel(X, Y) 
86.
                    If Farbe.Name = "ff000000" Then 
87.
                        Wert2 += 1 
88.
                    End If 
89.
                Next X 
90.
            Next Y 
91.
 
92.
            If Wert1 > Schwellwert Then 
93.
                Wert1Check = True 
94.
            End If 
95.
            If Wert2 > Schwellwert Then 
96.
                Wert2Check = True 
97.
            End If 
98.
 
99.
            Label1.Text = "Erste Box (Wert): " & Wert1 & " (" & Wert1Check & ")" 
100.
            Label2.Text = "Zweite Box (Wert): " & Wert2 & " (" & Wert2Check & ")" 
101.
            Label3.Text = "Schwellwert: " & Schwellwert 
102.
 
103.
        Else 
104.
            MsgBox("Abbruch") 
105.
            Close() 
106.
            End 
107.
        End If 
108.
    End Sub 
109.
End Class
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Sonstige Systeme
PDF-Formulare mit handschriftlicher Unterschrift (19)

Frage von FenjaW zum Thema Sonstige Systeme ...

Windows Netzwerk
gelöst Probleme beim Erkennen eines identischen Servers (5)

Frage von DonDento zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...