Virtuella 3D Imaging (3 / 6 steg)
Steg 3: Kodning: fånga bilder
Kopiera och spara denna kod i den tomma filen som du sparat tidigare.
Kör det här programmet endast i Java läge inuti IDE, < br > / / inte på Processing.js (webbläge)! < /p >< p > import processing.video.*; < /P >< p > PFont teckensnitt;
Sträng msg = "Klicka när du är klar!"; < /p >< p > fånga cam; fångar bilder från kameran
int ljusstyrka = 150; standard ljusstyrka < /p >< p > PImage img;
PImage X[] = ny PImage [360];
PImage Y [] = ny PImage [360]; < /p >< p > int arr = 0, c = 0; //arr lagrar klick och c matrisen, index
booleska start = false; / / kontroller fånga < /p >< p > void setup() {
storlek (640, 480);
Font = loadFont("CopperplateGothic-Bold-48.vlw"); Ersätt teckensnitt med ditt valda teckensnittet. Ta med extension .vlw
textFont (teckensnitt, 20);
fyllning (0, 0, 0); Ange färg i RGB-format
cam = nya fånga (detta, 640, 480, 30); Ställ in kameraupplösningen till 640 x 480 och frameRate till 30fps
cam.start(); Aktivera kameran
} < /p >< p > void draw() {
om (cam.available () == true & & arr < 3) //cam.avaialbe() kontrollerar om det finns eventuella byte finns att läsa från kamera
Kontrollera också om antalet klick inte överstiger 2
{
cam.Read(); fånga imagees
}
IMG = cam; Spara bild från kameran i variabeln
bild (cam, 0, 0); Visa kamerabild på fönster
Brighten(); ljusare bild för bättre synlighet
IF(start)
{
IF(arr == 1) //check om användaren har klickat på en gång
{
X [c] = get(); fånga skärmen
println ("X" + c + "sparade"); //display status i konsolen
c ++; uppdatera index
}
IF(arr == 2) //checked om användaren har klickat två gånger
{
Y [c] = get(); fånga skärmen
println ("Y" + c + "sparade"); statusen visas i konsolen
c ++; uppdatera index
}
}
IF(arr == 3) //check om användaren har klickat på tre gånger
{
saveImages (X, "X"); spara bilder uppsättning X till datamappen
saveImages (Y, "Y"); spara bilder uppsättning Y till datamappen
Arr ++; uppdatera klicka så sparas inte upprepas
MSG = "Gjort!"; Visa status
}
IF(c>359) {start = false; msg = "Klicka när du är klar";} //check om antalet bilder som tagits högst matrisstorlek, dvs, 360
text (msg, bredd/2-80, höjd-20); Visa krävs-meddelanden
}
void saveImages (PImage [pic], sträng ini)
{
för (int jag = 0; jag < 360; i ++) //loop löper 360 gånger
pic[i].Save(ini+i+".png"); PImage_Variable.save("nameOfFile") sparar bilder
} < /p >< p > void mousePressed() //called när musknapparna trycks
{
MSG = ""; tydliga texten på skärmen så att texten inte sparas i bilder
Arr ++; uppdatera antalet klick
c = 0; återställa vektorindex
Start = sant; att börja fånga
}
void keyPressed() / / kallas när tangentbord knappar trycks
{
ljusstyrka variabel lagrar av ljusstyrka
om (nyckel == "w") ljusstyrka ++; Tryck på "w" att öka intensiteten
annars om (nyckel == 's ") ljusstyrka--; Press' att minska ljusstyrka
IF(Brightness<0) ljusstyrka = 0; undvika onödiga minskning
}
void Brighten()
{
loadPixels(); < /P >< p > / / vi måste också uppmana loadPixels() PImage eftersom vi kommer att läsa dess pixlar. img.loadPixels();
för (int x = 0; x < img.width; x ++) {
för (int y = 0; y < img.height; y ++) {< /p >< p > / / beräkna 1D pixel plats
int loc = x + y*img.width; < /p >< p > / / få R, G, B värden från bilden
flyta r = röd (img.pixels[loc]);
flyta g = grön (img.pixels[loc]);
flyta b = blå (img.pixels[loc]); < /p >< p > / / beräknar vi en multiplikator, från 0,0 till 8,0 baserat på mouseX position.
Den multiplikatorn ändrar RGB-värdet för varje pixel.
flyta adjustBrightness = ((float) ljusstyrka / bredd) * 8.0;
r * = adjustBrightness;
g * = adjustBrightness;
b * = adjustBrightness; < /P >< p > / / The RGB-värden är begränsade mellan 0 och 255 innan sätts som en ny färg.
r = constrain(r,0,255);
g = constrain(g,0,255);
b = constrain(b,0,255); < /P >< p > / / gör en ny färg och ange pixel i fönstret
färg c = color(r,g,b);
pixlar [loc] = c;
}
}
updatePixels();
} < /p >
Nu i text-filen du sparade, anta att du har följande uppgifter:
namn = myCamera, storlek = X x Y, fps = F
I funktionen setup(), hitta raden:
storlek (640, 480);
Ändra det och ange dina värden så här:
storlek (X, Y);
Sedan hitta raden:
cam = nya fånga (detta, 640, 480, 30); < br >
Här gör förändringarna som detta och ange egna värden som denna:
cam = nya fånga denna, X, Y, F.
Nu kan du ta bort textfilen och du behöver inte komma ihåg alla data.
Kommentarerna beskriva delen av arbetet av koden.
Detta är vad som händer:
- Fånga från kamera
- Ändra ljusstyrka enligt användarindata.
- Öka ljusstyrkan
- Visa bilden på fönster
- Om användaren har klickat på en gång, lagra de nästa 360 bilderna i matrisen X
- Om användaren har klickat två gånger, lagra de nästa 360 bilderna i matrisen Y
- Om användaren har klickat på tre gånger, spara bilderna lagras i matriser X och Y i datorn i png-format.
Denna kod hjälper dig att fånga det nödvändiga antalet bilder och spara den i png-format.
Du kan även hämta filen Virtual3D.rar. Den innehåller alla nödvändiga kod och data filer krävs.