J'ai déployé la logique suivante dans une application Web. Veuillez l'utiliser si vous le souhaitez. https://checkerboardwebapp.herokuapp.com/
Le cadre gratuit de Heroku est de 600 heures, il peut donc ne pas être possible de l'utiliser dans certains cas. Eh bien, ça ira. Je ne pense pas que quiconque l'utilisera. Je l'ai fait presque pour moi, donc c'est assez difficile. Ce n'est pas si bon, il est donc préférable d'utiliser l'OpenCV officiel ici.
Bonsoir Je fabrique généralement des carreaux en noir et blanc (motif échiquier) pour l'étalonnage à l'aide d'un logiciel appelé ARCAD. Il est difficile de le refaire à chaque fois que la taille de la tuile change, alors j'ai essayé de savoir si cela pouvait être fait facilement. Quand je l'ai recherché, il y avait une bibliothèque qui pouvait facilement dessiner des figures en PDF, alors je l'ai implémentée. On ne sait pas dans quelle mesure il peut être utilisé car il n'a pas été réellement imprimé et vérifié. Je vais probablement avoir la chance de l'utiliser souvent à l'avenir Je me suis demandé si je pourrais l'utiliser n'importe où si je le publiais en tant qu'application WEB.
Je veux faire quelque chose comme ↓ en spécifiant la taille réelle (mm)
python:3.8 Bibliothèque utilisée: reportlab
J'ai implémenté le code de ↓
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'
#Verticale
VERTICAL_SIZE = 28
#côté
HORIZONTAL_SIZE = 19
#Position de départ
START_X = 10.0*mm
START_Y = 10.0*mm
#Taille carrée
RECT_SIZE = 10.0*mm
if __name__ == '__main__':
#Portrait A4
pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
#A4 sur le côté
# pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
pdf_canvas.saveState()
cnt_flag = True
X, Y = START_X, START_Y
#Dessin vertical
for i in range(VERTICAL_SIZE):
#Dessin horizontal
for j in range(HORIZONTAL_SIZE):
#Dessinez alternativement le blanc et le noir
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)
#Décaler la position X
X += RECT_SIZE
#Inversion du drapeau
cnt_flag = not cnt_flag
#S'il est pair, le noir et le blanc n'alternent pas, le drapeau est donc inversé une fois.
if HORIZONTAL_SIZE % 2 == 0:
cnt_flag = not cnt_flag
#Revenir au point de départ de la coordonnée X
X = START_X
#Décaler la position Y
Y += RECT_SIZE
pdf_canvas.restoreState()
pdf_canvas.save()
Une fois exécuté, here sera créé.
FILE_NAME = './box_grid_calibration.pdf'
#Verticale
VERTICAL_SIZE = 28
#côté
HORIZONTAL_SIZE = 19
#Position de départ
START_X = 10.0*mm
START_Y = 10.0*mm
#Taille carrée
RECT_SIZE = 10.0*mm
Je ne pense pas que cela nécessite une explication, mais les éléments ci-dessus déterminent le nombre de lignes, le nombre de colonnes, la position de départ du dessin et la taille de la tuile. En guise de mise en garde, reportlab semble avoir des coordonnées d'origine différentes des images normales, Il semble que l'axe Y devient positif vers le haut de l'origine inférieure gauche. L'axe X est le même. L'image est ci-dessous. Axe Y ↑ | | ● --- → axe X
J'ai également créé une version alternative et alignée de la version circulaire.
<détails> <résumé> Modèle alterné </ résumé>
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'
#Verticale
VERTICAL_SIZE = 28
#côté
HORIZONTAL_SIZE = 19
#Position de départ
START_X = 10.0*mm
START_Y = 10.0*mm
#Taille du rayon circulaire
RADIUS = 5.0*mm
if __name__ == '__main__':
#Portrait A4
pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
#A4 sur le côté
# pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
pdf_canvas.saveState()
cnt_flag = True
X, Y = START_X, START_Y
#Dessin vertical
for i in range(VERTICAL_SIZE):
#Dessin horizontal
for j in range(HORIZONTAL_SIZE):
#Dessinez alternativement le blanc et le noir
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)
#Décaler la position X
X += RADIUS * 2
#Inversion du drapeau
cnt_flag = not cnt_flag
#S'il est pair, le noir et le blanc n'alternent pas, le drapeau est donc inversé une fois.
if HORIZONTAL_SIZE % 2 == 0:
cnt_flag = not cnt_flag
#Revenir au point de départ de la coordonnée X
X = START_X
#Décaler la position Y
Y += RADIUS * 2
pdf_canvas.restoreState()
pdf_canvas.save()
J'ai couru ici
<détails>
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'
#Verticale
VERTICAL_SIZE = 19
#côté
HORIZONTAL_SIZE = 13
#Position de départ
START_X = 10.0*mm
START_Y = 10.0*mm
#Taille du rayon circulaire
RADIUS = 5.0*mm
if __name__ == '__main__':
#Portrait A4
pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=portrait(A4))
#A4 sur le côté
# pdf_canvas = canvas.Canvas(FILE_NAME, pagesize=landscape(A4))
pdf_canvas.saveState()
cnt_flag = True
X, Y = START_X, START_Y
#Dessin vertical
for i in range(VERTICAL_SIZE):
#Dessin horizontal
for j in range(HORIZONTAL_SIZE):
#Ne rien faire si c'est pair
if not cnt_flag:
#Inversion du drapeau
cnt_flag = not cnt_flag
continue
#Set noir
pdf_canvas.setFillColorRGB(0, 0, 0)
pdf_canvas.circle(X, Y, RADIUS, stroke=0, fill=1)
#Décaler la position X
X += RADIUS * 3
#Revenir au point de départ de la coordonnée X
X = START_X
#Décaler la position Y
Y += RADIUS * 3
pdf_canvas.restoreState()
pdf_canvas.save()
J'ai couru ici
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 Merci pour l'URL ci-dessus.
Recommended Posts