Hallo
bin neu hier im Forum.
ich bin zur zeit dabei eine Webcamerkennung zu programmieren. Diese soll später einmal zwei Lichtpunkte mit einer bestimmten Farbe erkennen und deren genaue Koordinaten daraus berechnen (für nen Roboter).
So um nun zu prüfen ob sie auch die zwei Lichtpunkte erkennt, will ich mein Webcam bild, welches ich von RGB in HSV umgewandelt und dort die zwei Lichtpunkte isoliert hab, in einer Picturebox wieder ausgeben.
Nun schaff ich es einfach nicht das Bild auszugeben. hab schon vieles, was ich im Netz gefunden habe ausprobiert aber immer scheiterts an Dateninkompatibilitäten.
Hab bei der Umwandlung alles in eine Matrix geschrieben. da ich diese wiederum für die Berechnungen benötige. Daher soll aus der Matrix dann das Bild wieder entstehen.
kann mir da jemand weiter helfen?
hier auch mal nen codeausschnitt:
bin neu hier im Forum.
ich bin zur zeit dabei eine Webcamerkennung zu programmieren. Diese soll später einmal zwei Lichtpunkte mit einer bestimmten Farbe erkennen und deren genaue Koordinaten daraus berechnen (für nen Roboter).
So um nun zu prüfen ob sie auch die zwei Lichtpunkte erkennt, will ich mein Webcam bild, welches ich von RGB in HSV umgewandelt und dort die zwei Lichtpunkte isoliert hab, in einer Picturebox wieder ausgeben.
Nun schaff ich es einfach nicht das Bild auszugeben. hab schon vieles, was ich im Netz gefunden habe ausprobiert aber immer scheiterts an Dateninkompatibilitäten.
Hab bei der Umwandlung alles in eine Matrix geschrieben. da ich diese wiederum für die Berechnungen benötige. Daher soll aus der Matrix dann das Bild wieder entstehen.
kann mir da jemand weiter helfen?
hier auch mal nen codeausschnitt:
VB.NET-Quellcode
- Private Sub cmdBildtoMatrix_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBildtoMatrix.Click
- Dim image1 As Bitmap 'Image eins als Variable vom Typ Bild erzeugen
- Dim matrix(320, 240, 1, 1, 1) As Long
- Dim px, py, x, y, Max, Min, PR, PG, PB As Integer 'Variablen für Koordinaten der Pixel definieren
- Dim bs As New BindingSource
- Dim mX, mY As Integer
- Dim StartZeit As Date
- Dim StopZeit As Date
- Dim image2 As Bitmap
- StartZeit = DateTime.Now
- image1 = CapturePicture(videoHandle) 'Aktuelles Bild der Kamera der Variable image1 zuordnen
- 'DataGridView mit Matrix Füllen
- DataGridView1.Columns.Add("X", "X") 'DataGridView Spalten erstellen
- DataGridView1.Columns.Add("Y", "Y")
- DataGridView1.Columns.Add("H", "H")
- DataGridView1.Columns.Add("S", "S")
- DataGridView1.Columns.Add("V", "V")
- For x = 0 To image1.Width - 1 'Schleife durch die Pixel
- For y = 0 To image1.Height - 1
- Dim pixelColor As Color = image1.GetPixel(x, y)
- ' Dim newColor As Color = Color.FromArgb(255, pixelColor.R, pixelColor.G, 250) 'Farbe des Aktuellen Pixels verändern pixelcolor.R = PixelFarbe Rot übernehmen
- PR = pixelColor.R 'RGB Werte den Variablen zuordnen
- PG = pixelColor.G
- PB = pixelColor.B
- If PR > PG And PR > PB Then 'Maximalwert von RGB herausfinden und in Variable Max schreiben
- Max = PR
- ElseIf PG > PR And PG > PB Then
- Max = PG
- Else
- Max = PB
- End If
- If PR < PG And PR < PB Then 'Minimalwert von RGB herausfinden und in Variable Min schreiben
- Min = PR
- ElseIf PG < PR And PG < PB Then
- Min = PG
- Else
- Min = PB
- End If
- If Max = Min Or PR = PG = PB Then 'H wert errechnen
- h1 = 0
- Else
- If Max = PR Then
- h1 = 60 * (0 + (PG - PB) / (Max - Min))
- ElseIf Max = PG Then
- h1 = 60 * (2 + (PB - PR) / (Max - Min))
- Else
- h1 = 60 * (4 + (PR - PG) / (Max - Min))
- End If
- End If
- If Max = 0 Or PR = PG = PB = 0 Then 'S Wert errechnen
- s1 = 0
- Else
- s1 = (Max - Min) / Max
- End If
- v1 = Max 'V Ist = dem Maximal wert
- matrix(x, y, 0, 0, 1) = h1 'HSV Werte in Matrix schreiben
- matrix(x, y, 0, 1, 1) = s1
- matrix(x, y, 1, 1, 1) = v1
- mX = x
- mY = y
- DataGridView1.Rows.Add(mX, mY, h1, s1, v1) 'Werte in DataGridView einlesen
- Next
- Next
- StopZeit = DateTime.Now
- Label1.Text = CStr(DateDiff(DateInterval.Second, StartZeit, StopZeit)) & " Sekunden"
- End Sub