2017-10-07 2 views
-1

Ich werde ein Projekt auf einem Raspberry Pi machen, wo ich ein Bild durch einen Projektor anzeigen. Das Bild ist ein Rechteck, das genau doppelt so lang wie breit ist. Da ich über den Projektor zeige, bedeutet das, dass die Seite, die am weitesten vom Projekt entfernt ist, schmaler ist als die nähere Seite, also muss ich diese Seite des Bildes erweitern.Skew eine Seite des Bildes

Kann mir jemand in die richtige Richtung zeigen, wie ich das bitte umsetzen würde? Ich weiß nicht einmal, was die richtige Terminologie ist, um sie zu verbessern und in die Mathematik zu schauen, die ich machen müsste.

+0

Meinst du, dass Sie (sagen wir) Kommandozeilen-Tools verwenden, um Ihr Bild zu verzerren, oder dass Sie es mit Code, den Sie schreiben, verarbeiten möchten? Ein gutes Werkzeug, um Bilder auf alle möglichen cleveren Arten zu verzerren, ist 'convert', das Teil des ImageMagick-Pakets ist. –

+0

Ich würde es über Code verarbeiten. – Gargoyle

+0

Ich habe 4 Punkte auf der projizierten Oberfläche, die ein Rechteck machen, so mein Gedanke war ein anfängliches Kalibrierungsbild würde nur ein Rechteck zeichnen, und dann das Bild anpassen, bis jede Ecke diese 4 Punkte berührte, und dann würde ich meinen genauen ' Versätze, die ich erklären müsste. – Gargoyle

Antwort

1

Was Sie fragen, heißt "Keystone-Korrektur", glaube ich. Viele Videoprojektoren können dies automatisch tun, also sollten Sie es überprüfen, bevor Sie einen Stapel Code schreiben :)

Gehen Sie dazu wie folgt vor: Verwenden Sie das Dienstprogramm ImageMagick convert. Sie müssen die Größe des Bildes wissen, um damit zu beginnen. Nehmen wir als Beispiel an, dass es 889 x 746 ist. Nehmen wir an, wir wollen, dass das Bild unten um 60 Pixel "dünner" ist als das obere, und dass die "Ausdünnung" symmetrisch zur vertikalen Mitte ist. Linie.

Also nennen wir das obere linke Pixel (1,1), das obere rechte (889,1), das untere linke (1,746) und das untere rechte (889,746). Die oberen linken und oberen rechten Pixel bleiben wo sie sind; der untere linke "bewegt sich" von (1,746) nach (61,746). Die untere rechte Ecke bewegt sich zu (829,746), weil 889-60 829 ist - das ist eine Bewegung nach links.

Der Befehl convert -distort perspective erfordert die Koordinaten von vier Pixeln, ihre Werte vor und nach der Verschiebung. Anschließend wird berechnet, wie alle anderen Pixel verschoben werden, sodass gerade Linien im Original gerade bleiben. Also, über die berechneten Werte nehmen, die wir brauchen:

convert in.png -virtual-pixel transparent -distort perspective \ 
    '1,1 1,1   \ 
    889,1 889,1  \ 
    1,746 60,746  \ 
    889,746 829,746' \ 
    out.png 

Natürlich ist der Abstand nicht wesentlich: es ist nur zu zeigen, wie die Zahlen oben mit den berechneten Werten übereinstimmen.

Natürlich müssen Sie die Zahlen an Ihre Bildgröße und den Grad der Korrektur anpassen, die Sie benötigen. ImageMagick ist für Raspberry Pi verfügbar, und es ist einfach genug, einen Aufruf an convert in Anwendungscode einzubetten.

+0

Vielen Dank. – Gargoyle

+0

Gern geschehen. Wenn meine Antwort hilfreich war, klicken Sie einfach auf den kleinen Pfeil nach oben, damit andere es wissen;) –

+0

Das sind wirklich zwei Schritte, wie ich es sehe.Da ich die Oberkante breiter als das Originalbild haben möchte, muss ich zuerst die Breite des Originalbildes so verändern, dass sie breiter ist als zuvor, und dann die Verzerrung verwenden, die Sie mir gezeigt haben, um das * untere * schmaler zu machen, oder? – Gargoyle