3D-miljö Laser Scanner från början (4 / 7 steg)
Steg 4: 1. bearbetningsprogram
I första behandlingen skissar vi kommer att titta på vad webbkameran är att se och extrahera alla röda bildpunkter över en tröskel och spara dem i en annan bild som vita pixlar. Då ska vi städa det upp lite och avsluta med en tunn vit prickig profil av skannade föremål. Då sparar vi de vit pixel X-Y-koordinaterna till en textfil tillsammans med motor vinkeln vid varje bildruta.
Återigen, du kan bara titta på Del3 av video-serien eller titta igenom kommentarerna i skissen men jag ska redogöra för vad som händer här.
Igen, jag hoppar över den viktiga lite (draw loop). Så först och främst måste vi skapa två bilder som har samma storlek som webbkameran foder, 640 x 480. Ställa in bakgrunden till svart.
Nu behöver vi skriva ut motor vinkeln till motor vinkeln till textfilen, förutom att vi inte har läst den från Arduino ännu? Det är bra eftersom vi vet att det har noll till att börja med, och nästa gång runda får vi läsa det! Det behöver göras detta sätt att undvika skrivs en massa kinesiska tecken till textfilen. MEN innan vi skriver denna vinkel, måste vi föregå det med ';'. Detta är så nästa behandling program vet det har att göra med en ny bildruta från webbkameran när den ser en ';'.
Nästa måste vi kontrollera om en ny bildruta från webbkameran är tillgängligt, om det är då vi läser det! Detta sparar en webbkamera ram till videoobjektet och vi kan få enskild pixelvärden med hjälp av video.pixels[i] där "i" är antalet pixel kör från övre vänstra längs till höger sida av skärmen och ner. Så här börjar på 0 och går upp till 640 * 480 = 307200.
Här läser vi från den seriella porten att läsa motor vinkeln från Arduino. Vi kontrollera först om det finns fyra eller fler byte i följetong buffert, en flöte är fyra byte så vi måste vänta tills hela flötet är redo att läsa. Sedan läser vi inkommande data tills vi träffar en ny rad och spara den som en sträng. Efter det måste vi konvertera den till en flottör och spara den till "motangle", men bara innan, kontrollen att se om "myString" faktiskt sparat något.
Nu lite roligt. Skapa en for-loop som upprepas en gång för varje bildpunkt på webbkameran. Kontrollera om den aktuella pixeln har en röd värde som överstiger ett visst tröskelvärde. Här bestämmer du känsligheten på skannern. Den lägre tröskeln (så lågt som 1) desto mer känsliga scan, används för mycket mörka scener där laserljuset är mycket svagt, slå ut alla lampor för detta. En högre tröskel kan användas där det finns andra ljus i scenen (hålla det minimal ändå) och du bara vill ha ljusa linjen ska plockas. SÅ! Om röda är mer än detta värde, sedan placerar du en vit pixel i samma pixel koordinaten i bild 1. Detta ger en svart/vit bild där de röda bitarna är vit och allt annat är svart.
Om vi använde denna bild i 3D-programmet, skulle det nästan säkert krascha. Det är alldeles för många datapunkter. Det skulle också ge en mycket tjock ytfinish till allt eftersom raden är luddiga och brett.
Åtgärda detta genom att en annan slinga på samma sätt som den tidigare för loop. Gör sedan ett tag loop i det kretsar. While loop endast körs när det kommer över en vit pixel i bild 1 och det är fortfarande i bilden och om den är på en linje som är delbara med 5. Denna sista biten ger oss den streckade delen, måste du använda den modulo-funktion för att göra detta. Det nummer du använder kommer att avgöra den vertikal upplösningen för genomsökningen. Titta på videon för en bättre förklaring till detta.
Så i detta medan loop, vi bara räkna upp med "k" (och "i" också eftersom den för loop inte får en chans att göra det). Så denna loop upprepas så länge som det är i en rad med vita pixlar i bild 1, så "k" räknar hur många finns i en rad. När den träffar en svart pixel igen, hoppar ur loopen och plops en vit pixel i bild 2 mitt i raden det bara sprang igenom.
Måste du behöver skriva ut X- och Y-koordinaterna för denna nya vit pixel till textfilen! Kom ihåg att skilja koordinaterna med en ',' så nästa skiss vet vad som är vad. Om du vill skriva ut X-koordinaten, måste vi använda den modulo funktion igen, det kommer att ge oss den kolumn som pixel är på (jag % 640). Och Y-koordinaten måste vi hitta raden är det, göra detta bara genom att dividera antalet pixel bredd (jag / 640). Detta avrundar nedåt svaret vilket är perfekt eftersom det ger oss den exakta rad dess på!
Sedan kan vi skriva ut bilderna till våra render fönster för att se vad som händer. Jag satte webbkamera feed på toppen, och bild 2 nedan så jag kan se det slutliga resultatet. För att placera bilder, den första som börjar vid 0,0 (överst till vänster i fönstret) och nästa bild på 0,480 (halvvägs ner till vänster).
Vi måste kontrollera motor vinkeln och se om det är att skicka den hemliga koden att berätta för oss att stoppa skissen. Kom ihåg att vi skickar en vinkel på 500 när det är att vilja sluta, så vi bara kolla om det finns mer än 450. Om det är, sedan vi spola text fil bufferten och stäng filen och avsluta programmet.