Stap 4: 1e Processing programma
In de eerste Processing Schets we zijn gaan kijken wat de webcam ziet en pak alle rode pixels boven een drempel en ze opslaan op een andere afbeelding als witte pixels. Vervolgens zult wij opgeruimd het een bits en eind omhoog met een dunne witte gestippelde Profiel van het gescande onderwerp. We sla die witte pixel X-en Y-coördinaten naar een tekstbestand samen met de motor hoek bij elk frame.
Nogmaals, u kunt gewoon deel 3 van de video-serie kijken of kijken via de commentaar in de sketch maar ik zal schetsen wat er gaande is hier.
Nogmaals, ik zal overslaan naar de belangrijke stukje (loting lus). We moeten dus eerst af, maken twee beelden die de dezelfde grootte als de webcam feed, 640 x 480. De achtergrond ingesteld op zwart.
Nu moeten we de motor hoek aan de motor hoek naar het tekstbestand, afdrukken, tenzij we het van de Arduino nog niet hebt gelezen? Het is fijn, want we het weten is nul om mee te beginnen, en de volgende keer zal er lezen! Het moet worden gedaan op deze manier om te voorkomen dat een belasting van Chinese tekens naar het tekstbestand schrijven... MAAR voordat we deze hoek schrijven, moeten we vooraf met ';'. Dit is dus het volgende verwerking programma het zich bezighoudt met een nieuw frame van de webcam weet bij het zien van een ';'.
Daarna nodig hebben wij om te controleren om te zien als een nieuw frame van de webcam beschikbaar is, als er dan we het lezen! Dit bespaart een webcam frame op het video-object, en kunnen we afzonderlijke pixelwaarden met behulp van video.pixels[i] waar 'ik' het aantal pixels vanaf de linksboven is langs aan de rechterkant van het scherm en naar beneden. Dus dit begint bij 0 en gaat tot 640 * 480 = 307200.
Hier lezen we van de seriële poort te lezen van de motor hoek van de Arduino. Eerst controleren we om te zien dat als er vier of meer bytes in de buffer seriële, een float is 4 bytes, dus we wachten moeten totdat de hele float is klaar om te lezen. We lezen dan de binnenkomende gegevens totdat we een nieuwe regel raken en sla het op als een tekenreeks. Na dat moeten we converteren naar een float en sla het 'motangle', maar net voordat dat controleren om te zien als 'myString' eigenlijk iets opgeslagen.
Nu de pret een beetje. Maak een lus die één keer wordt herhaald voor elke pixel op de webcam. Controleer om te zien of de huidige pixel een waarde voor rood dat is meer dan een bepaalde drempelwaarde. Hier bepaalt u de gevoeligheid van de scanner. Hoe lager de drempel (zo laag als 1) hoe gevoeliger de scan, gebruikt voor zeer donkere scènes waarin het laserlicht zeer dim, blijken alle verlichting hiervoor. Een hogere drempel kan worden gebruikt wanneer er andere licht in de scene (Houd het minimale wel) en u wilt dat alleen de heldere lijn te worden uitgekozen. DUS! Als de rode groter dan deze waarde is, dan schakelt u een witte pixel op de dezelfde Pixelcoördinaat in afbeelding 1. Dit geeft een zwart/wit beeld waar de rode bits zijn wit en alles is zwart.
Als we dit beeld in de 3D-programma gebruikt, zou het bijna zeker verpletteren. Het is veel te veel gegevenspunten. Het zou ook een zeer dikke oppervlakte-afwerking geven aan alles, omdat de lijn wazig en breed is.
Om dit te verhelpen, maak een andere lus hetzelfde als de vorige for-lus. Breng een tijdje lus in die lus. De tijdjelijn kan alleen worden uitgevoerd als het gaat over een witte pixel in afbeelding 1 en het is nog steeds binnen het besturingselement image en als het op een lijn die dividable door 5. Dit laatste stukje geeft ons het decimale deel, hebt u de modulo functie om dit te doen. Het nummer dat u gebruiken zal bepalen van de verticale resolutie van de scan. Bekijk de video voor een betere uitleg van dit.
Dus in dit while lus, is alles wat we doen graaf up met behulp van de 'k' (en 'i' zo goed omdat de voor lus is niet het krijgen van een kans om het te doen). Dus deze lus wordt herhaald, zolang het is in een rij van witte pixels in afbeelding 1, dus 'k' is tellen hoeveel zijn in een rij. Zodra het een zwarte pixel weer raakt, het springt uit de lus en een witte pixel plops in afbeelding 2 in het midden van die rij liep gewoon door.
Dan moet je hoeft af te drukken van de X- en Y-coördinaten van deze nieuwe witte pixel naar de tekstbestand! Vergeet niet te scheiden van de coördinaten met een "," zodat de volgende schets weet wat wat is. Als u wilt afdrukken van de X-coördinaat, moeten we gebruiken de modulo functie weer, het geeft ons de kolom die de pixel is op (ik % 640). En voor de Y-coördinaat moeten we vinden van de rij is het op, dit doen door het aantal pixels te delen door de breedte (ik / 640). Dit afgerond naar het antwoord dat perfect is omdat het geeft ons de exacte rij zijn op!
Vervolgens kunnen we de beelden afdrukken naar onze render-venster om te bekijken wat er gaande. Ik zet de webcam waardplanten en/of afbeelding 2 hieronder zodat ik het eindresultaat kan zien. Voor het plaatsen van de afbeeldingen, de eerste die begint bij 0,0 (pictogram linksboven in het venster) en het volgende beeld op 0,480 (de helft naar beneden aan de linkerkant).
Dan moeten wij controleren de motor hoek en te zien als het sturen van de geheime code om ons om te stoppen met de schets te vertellen. Herinner me dat wij sturen een hoek van 500 wanneer het te stoppen, willen is zodat we gewoon controleren om te zien of het meer dan 450 is. Als er, dan wij de tekst bestand buffer leegmaken en sluit het bestand en sluit het programma af.