[PYTHON] Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung

Nachtrag

Ich habe die folgende Logik in einer Web-App bereitgestellt. Bitte benutzen Sie es, wenn Sie möchten. https://checkerboardwebapp.herokuapp.com/

Herokus freier Frame beträgt 600 Stunden, daher ist es in einigen Fällen möglicherweise nicht möglich, ihn zu verwenden. Nun, es wird alles gut. Ich glaube nicht, dass irgendjemand es benutzen wird. Ich habe es fast für mich selbst gemacht, also ist es ziemlich rau. Es ist nicht so gut, also ist es besser, das offizielle OpenCV [hier] zu verwenden (https://docs.opencv.org/master/da/d0d/tutorial_camera_calibration_pattern.html).

Einführung

Guten Abend Normalerweise mache ich Schwarz-Weiß-Kacheln (Schachbrettmuster) zur Kalibrierung mit der Software ARCAD. Es ist mühsam, es jedes Mal neu zu erstellen, wenn sich die Kachelgröße ändert. Deshalb habe ich versucht herauszufinden, ob es einfach gemacht werden kann. Als ich es nachgeschlagen habe, gab es eine Bibliothek, die leicht Zahlen in PDF zeichnen konnte, also habe ich es implementiert. Ich habe es nicht gedruckt und überprüft, daher ist nicht bekannt, wie weit es verwendet werden kann. Ich werde wahrscheinlich die Chance haben, es in Zukunft oft zu benutzen Ich fragte mich, ob ich es überall verwenden könnte, wenn ich es als WEB-Anwendung veröffentlichen würde.

Was du machen willst

Ich möchte so etwas wie ↓ machen, indem ich die tatsächliche Größe (mm) spezifiziere. image.png

Umgebung

python:3.8 Verwendete Bibliothek: reportlab

Machen Sie Schwarz-Weiß-Kacheln für die Kalibrierung

Ich habe den Code von ↓ implementiert

box_grid.py


#! /usr/bin/python
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A1, A2, A3, A4,landscape, portrait
from reportlab.lib.units import cm, mm

FILE_NAME = './box_grid_calibration.pdf'
#Vertikal
VERTICAL_SIZE = 28
#Seite
HORIZONTAL_SIZE = 19
#Startposition
START_X = 10.0*mm
START_Y = 10.0*mm
#Quadratische Größe
RECT_SIZE = 10.0*mm

if __name__ == '__main__':
    #A4 Porträt
    pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
    #A4 seitwärts
    # pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
    pdf_canvas.saveState()

    cnt_flag = True

    X, Y = START_X, START_Y
    #Vertikale Zeichnung
    for i in range(VERTICAL_SIZE):
        #Horizontale Zeichnung
        for j in range(HORIZONTAL_SIZE):
            #Zeichne abwechselnd Weiß und Schwarz
            pdf_canvas.setFillColorRGB(255, 255, 255) if cnt_flag else pdf_canvas.setFillColorRGB(0, 0, 0)
            pdf_canvas.rect(X, Y, RECT_SIZE, RECT_SIZE, stroke=0, fill=1)
            #X-Position verschieben
            X += RECT_SIZE
            #Flaggenumkehr
            cnt_flag = not cnt_flag

        #Wenn es gerade ist, wechseln sich Schwarz und Weiß nicht ab, sodass das Flag einmal invertiert wird.
        if HORIZONTAL_SIZE % 2 == 0:
            cnt_flag = not cnt_flag

        #Kehren Sie zum Startpunkt der X-Koordinate zurück
        X = START_X
        #Y-Position verschieben
        Y += RECT_SIZE

    pdf_canvas.restoreState()
    pdf_canvas.save()

Bei der Ausführung wird hier erstellt.

FILE_NAME = './box_grid_calibration.pdf'
#Vertikal
VERTICAL_SIZE = 28
#Seite
HORIZONTAL_SIZE = 19
#Startposition
START_X = 10.0*mm
START_Y = 10.0*mm
#Quadratische Größe
RECT_SIZE = 10.0*mm

Ich denke nicht, dass es einer Erklärung bedarf, aber die obigen Elemente bestimmen die Anzahl der Zeilen, die Anzahl der Spalten, die Startposition der Zeichnung und die Kachelgröße. Als Einschränkung scheint Reportlab andere Ursprungskoordinaten als normale Bilder zu haben. Es scheint, dass die Y-Achse oben am unteren linken Ursprung positiv wird. Die X-Achse ist dieselbe. Das Bild ist unten. Y-Achse ↑ | | ● --- → X-Achse

Ich habe auch eine alternative und ausgerichtete Version der Kreisversion erstellt.

Alternierendes Muster

circle_grid.py


#! /usr/bin/python
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A1, A2, A3, A4,landscape, portrait
from reportlab.lib.units import cm, mm

FILE_NAME = './circle_grid_calibration.pdf'
#Vertikal
VERTICAL_SIZE = 28
#Seite
HORIZONTAL_SIZE = 19
#Startposition
START_X = 10.0*mm
START_Y = 10.0*mm
#Kreisradiusgröße
RADIUS = 5.0*mm

if __name__ == '__main__':
    #A4 Porträt
    pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
    #A4 seitwärts
    # pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
    pdf_canvas.saveState()

    cnt_flag = True

    X, Y = START_X, START_Y
    #Vertikale Zeichnung
    for i in range(VERTICAL_SIZE):
        #Horizontale Zeichnung
        for j in range(HORIZONTAL_SIZE):
            #Zeichne abwechselnd Weiß und Schwarz
            pdf_canvas.setFillColorRGB(255, 255, 255) if cnt_flag else pdf_canvas.setFillColorRGB(0, 0, 0)
            pdf_canvas.circle(X, Y, RADIUS, stroke=0, fill=1)
            #X-Position verschieben
            X += RADIUS * 2
            #Flaggenumkehr
            cnt_flag = not cnt_flag

        #Wenn es gerade ist, wechseln sich Schwarz und Weiß nicht ab, sodass das Flag einmal invertiert wird.
        if HORIZONTAL_SIZE % 2 == 0:
            cnt_flag = not cnt_flag

        #Kehren Sie zum Startpunkt der X-Koordinate zurück
        X = START_X
        #Y-Position verschieben
        Y += RADIUS * 2

    pdf_canvas.restoreState()
    pdf_canvas.save()

Ich habe [hier] ausgeführt (https://drive.google.com/file/d/1unJEdEpJsMi3CUFowKF4lRJ7q6nkhxhU/view?usp=sharing)

Ausrichtungsmuster

circle_grid2.py


#! /usr/bin/python
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A1, A2, A3, A4,landscape, portrait
from reportlab.lib.units import cm, mm

FILE_NAME = './circle_grid2_calibration.pdf'
#Vertikal
VERTICAL_SIZE = 19
#Seite
HORIZONTAL_SIZE = 13
#Startposition
START_X = 10.0*mm
START_Y = 10.0*mm
#Kreisradiusgröße
RADIUS = 5.0*mm

if __name__ == '__main__':
    #A4 Porträt
    pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
    #A4 seitwärts
    # pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
    pdf_canvas.saveState()

    cnt_flag = True

    X, Y = START_X, START_Y
    #Vertikale Zeichnung
    for i in range(VERTICAL_SIZE):
        #Horizontale Zeichnung
        for j in range(HORIZONTAL_SIZE):
            #Tu nichts, wenn es gerade mal ist
            if not cnt_flag:
                #Flaggenumkehr
                cnt_flag = not cnt_flag
                continue
            #Schwarz einstellen
            pdf_canvas.setFillColorRGB(0, 0, 0)
            pdf_canvas.circle(X, Y, RADIUS, stroke=0, fill=1)
            #X-Position verschieben
            X += RADIUS * 3

        #Kehren Sie zum Startpunkt der X-Koordinate zurück
        X = START_X
        #Y-Position verschieben
        Y += RADIUS * 3

    pdf_canvas.restoreState()
    pdf_canvas.save()

Ich habe [hier] ausgeführt (https://drive.google.com/file/d/1qz9SwuQ7z4S984usi_2QaRLutPTZAkXz/view?usp=sharing)

Referenz-URL / Quelle

https://kuratsuki.net/2018/06/python-3-%E3%81%AE-reportlab-%E3%81%A7-pdf-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/ https://symfoware.blog.fc2.com/blog-entry-769.html Danke für die obige URL.

Recommended Posts

Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung
Machen Sie eine Tweet-Box für Pepper
Kamerakalibrierung
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
Qt für Python App Desktop App
ROS-Kurs 107 Machen Sie einen Kunden für Rosblidge
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Erstellen Sie einen Bot für Skype unter EC2 (CentOS)
Machen Sie vorerst ein Histogramm (matplotlib)
Machen Sie für VB6.
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Ergänzung zur "Kamerakalibrierung" von OpenCV-Python-Tutorials
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Lass uns ein Squashspiel machen
Erstellen Sie eine Distanzmatrix
Ich mache ein Passwort!
Kamerakalibrierung visuell verstehen
Machen Sie einen Nyan-Knopf
Mach ein Spiel im Tetris-Stil!
Erstellen Sie einen Base64-Decoder
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)