Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 41

Thema: USB oder TCP/IP Camera VB.Net

  1. #11
    Registriert seit
    13.12.2011
    Beiträge
    1.408
    Danke
    147
    Erhielt 158 Danke für 149 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bezüglich der Preise lassen die Hersteller/Händler auf jedenfall mit sich reden, kann die ganze Angelegenheit denen doch auch nutzen.

    Von irgendwas mit Internetzugang gesendet.

  2. #12
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,
    so ich habe jetzt mal ein VB.Net Programm geschrieben welche mir von einer USB WebCam ein Bild erstellt und dies dann in eine Schwarz Weiß bild Umwandelt.
    Ich habe jetzt nur ein Problem das wenn ich das Programm schließe ich meine Rechner Neustarten muss weil ich nicht mehr auf die WebCam komme.

    Code:
    Imports System.IO
    Imports System.Drawing.Imaging
    Imports System.Runtime.InteropServices
    
    Public Class Form1
        Dim mybild As Bitmap
    
        Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef pDst As Byte, ByRef pSrc As Byte, ByVal ByteLen As Integer)
        Public Declare Auto Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
        Const EM_LINEFROMCHAR As Integer = &HC9
        Const EM_LINEINDEX As Integer = &HBB
        Public Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
        Const WS_CHILD As Integer = &H40000000
        Const WS_VISIBLE As Integer = &H10000000
        Const WM_USER As Short = &H400S
        Const WM_CAP_START As Short = &H400S
        Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
        Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
        Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)
        Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
        Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)
        Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)
    
        'Um den Aufruf der Capture Funktionen noch einfacher zu machen braucht man noch sog. Wrapper Funktionen.
        'Diese sind ganz einfach aufzurufen und übernehmen den kompilzierteren Aufruf der API Methoden.
    
        'Hier werden 3 erstellt:
        'CreateCaptureWindow - Zeigt das WebCam Bild auf einem Control an
        'CapturePicture - Erstellt einen Schnappschuss und gibt ihn als System.Drawing.Image zurück.
        'Disconnect - Gibt die für die WebCam benötigten Resourcen frei
    
        ' Handle für die WebCam.
    
        Dim videoHandle As System.IntPtr
    
        ' senden eienr Ausgabenvorschau der WebCam an das betreuende control  hWndParent.
    
        Public Function CreateCaptureWindow(ByRef hWndParent As IntPtr, Optional ByRef x As Integer = 0, Optional ByRef y As Integer = 0, Optional ByRef nWidth As Integer = 1280, Optional ByRef nHeight As Integer = 720, Optional ByRef nCameraID As Integer = 0) As IntPtr 'Hier wird die Cam eingestellt 1 für intern 0 extern
    
            Dim previewHandle As IntPtr
            previewHandle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1)
            SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0) '1
            SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 15, 0)
            SendMessage(previewHandle, WM_CAP_SET_OVERLAY, 1, 0)
            SendMessage(previewHandle, WM_CAP_SET_PREVIEW, 1, 0)
            Return previewHandle
    
        End Function
    
        Public Function CapturePicture(ByRef nCaptureHandle As IntPtr) As System.Drawing.Image
            My.Computer.Clipboard.Clear()
            SendMessage(nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0)
            Return My.Computer.Clipboard.GetImage
        End Function
    
        Public Sub Disconnect(ByRef nCaptureHandle As IntPtr, Optional ByRef nCameraID As Integer = 0)
            SendMessage(nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0) '1
        End Sub
    
        'Das wars! Die API wird von den Wrapper Funktionen sauber aufgerufen und die WebCam steht zur Verfügung.
        'Um das Bild nun z.B. in einer PictureBox anzuzeigen genügt folgender Code:
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            videoHandle = Me.CreateCaptureWindow(Me.picLive.Handle)
        End Sub
    
        Private Sub btnBildUebernehmen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBildUebernehmen.Click
            Dim BILD As Bitmap
    
            BILD = CapturePicture(videoHandle)
            picSchwarzWeiß.Image = BILD
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Text = Now
        End Sub
    
        Private Sub btnSchwerzWeiß_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSchwerzWeiß.Click
            ' Wandelt das Bild in ein Graustufenbild um
            ' Gewichtung der Farben Luminanz-Umsetzung
    
            Dim x, y As Integer
            Dim Farbe As Color
            Dim FarbeGrau As Color
            Dim Grauwert As Integer
    
            Dim Bild As Bitmap = picSchwarzWeiß.Image
            Dim BildGrau As New Bitmap(Bild.Width, Bild.Height)
    
    
            For y = 0 To Bild.Height - 1
                For x = 0 To Bild.Width - 1
                    Farbe = Bild.GetPixel(x, y)
                    Grauwert = Farbe.R * 0.3 + Farbe.G * 0.59 + Farbe.B * 0.11 '0.3  0.59  0.11
                    FarbeGrau = Color.FromArgb(Grauwert, Grauwert, Grauwert)
                    BildGrau.SetPixel(x, y, FarbeGrau)
                Next
            Next
    
            ' Jetzt GrauBild in PictureBox anzeigen
            picSchwarzWeiß.Image = BildGrau
        End Sub
    
    End Class
    Kann mir einer Sagen woran das liegen kann?
    Gruß

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Ich hätte da eine Idee :
    Du solltest beim Verlassen deiner Applikation die DisConnect-Methode aufrufen (wie es in deinem Hilfetext im Kopf der Klasse beschrieben ist).
    Generell ist es bei .Net-Anwendungen immer wichtig, allokierte Resourcen wieder frei zu geben ...

    Gruß
    Larry

  4. #14
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Moin!

    VB.net? dann nimm doch AForge... da is alles drin. Bildererkennung, auswertung umwandlung usw.
    Und das auswählen der Kamera machen die auch anders... Da brauchts keine Librariess

    Gruß

  5. #15
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,
    Danke für den hinweis, geht jetzt super.
    Ist AForg schwer zu lernen?
    Wenn ja ist das empfehlenswert wenn man sich schon gut auskennt?
    Gruß

  6. #16
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo
    Was heisst schwer zu lernen...? Sind eben Bibliotheken zum einbinden. Damit ist dann Objekterkennung möglich. Sind auch beispiele dabei.
    Gruss

  7. #17
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,
    aso das sind nur Biblitheken zum einbinden.
    Jetzt hätte ich noch ein Frage wo ich im Intern noch nicht fündig geworden bin.
    Ich habe jetzt über ein WebCam eine Bild in einer PictureBox, dieses möchte ich über einen Button auf die Farbe Weiß überprüfen
    und wenn es nicht Weiß ist soll es in ein Schwarzes Pixel umgewandelt werden.
    Da es nicht ein rein Weißes Pixel sein kann, muss ich da ein kleiner gleich Abfrage machen.
    Meine IF Abfrage
    Code:
     For x = 0 To BildS.Width - 1
                For y = 0 To BildS.Height - 1
                    If Not BildS.GetPixel(x, y) = Color.Black Then
                        BildS.SetPixel(x, y, Color.White)
                    End If
                Next y
            Next x
    Da müsste ich ja an der Stelle "Color.Black" eine Toleranz bzw. eine kleiner gleich Abfrage machen, wie mach ich das da an der Stelle?

    Gruß

  8. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    du musst die Farb-Information auf Basis ihrer ARGB-Bestandteile vergleichen - dort hättest du wieder Integer, bei denen du ein <= oder >= machen kannst.
    Wenn du allerdings ein "buntes" Bild hast dann ist deine "Binarisierung" ggf. ein bißchen ausprobieren.
    Also etwa so :
    Code:
    Dim myPixelColor as Color
    
    und in der Schleife dann
    
    myPixelColor = BildS.GetPixel(x, y)
    If myPixelColor.A < 80 or myPixelColor.R < 80 or  myPixelColor.G < 80 or  myPixelColor.B < 80 then
       BildS.SetPixel(x, y, Color.Black)
    else
       BildS.SetPixel(x, y, Color.White)
    End If
    Gruß
    Larry

  9. #19
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Guten Morgen!

    @Larry: wollt ich grad schreiben

    Andere Möglichkeit wäre noch das Bild umzuwandeln z. B. in Schwarzweiss... kommt aufs Bild drauf an

  10. #20
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wie groß sind denn die Bilder die du bearbeitest? GetPixel ist so ziehmlich die langsamste Variante die du dafür verwenden kannst.
    Schau dir die Bitmap.LockBits Methode an. (Findest genug Beispiele dazu im Netz) Damit kannst du dein Bitmap direkt im Speicher bearbeiten (unmanaged) was deutlich schneller sein sollte.
    Ansonsten, wie schon dutzende male hier erwähnt, AForge biete einige Filterfunktionen die dir evtl. helfen können.
    Sänd from mei Kombjudder mitse Dastadurr.

Ähnliche Themen

  1. Step 7 TCP Verbindungen/Simatic Net
    Von Kotezel im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.06.2013, 20:20
  2. .NET Treiber für den Zugriff auf E/A Signale mit C# oder VB.NET
    Von CSharper im Forum Werbung und Produktneuheiten
    Antworten: 2
    Letzter Beitrag: 05.06.2012, 09:33
  3. TCP Kommunikation mit Camera
    Von baggerandy im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.12.2010, 17:04
  4. Antworten: 10
    Letzter Beitrag: 17.06.2008, 18:30
  5. TCP/IP -> 1394 Net Adapter
    Von tomatensaft im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 01.03.2007, 13:06

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •