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).
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.
Ich möchte so etwas wie ↓ machen, indem ich die tatsächliche Größe (mm) spezifiziere.
python:3.8 Verwendete Bibliothek: reportlab
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.
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)
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)
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