Рисование полноэкранного шахматного рисунка? - PullRequest
0 голосов
/ 23 мая 2019

Я работаю в OpenCV (калибровка камеры, а затем создаю 3d-модель), и до сих пор я всегда печатал образец шахматной доски на бумаге, а затем делал снимки, необходимые для калибровки.Я попытался найти способ нарисовать рисунок на весь экран с заранее заданными размерами квадратов (чтобы я мог установить этот размер квадрата в процессе калибровки), но я нашел только модуль черепахи Python, который, кажется, предназначен только для рисования начасть экрана, и она всегда рисует стрелку на последнем квадрате.Мне нужно нарисовать шаблон с небольшим смещением от границ экрана и внутри этих смещений нарисовать шахматную доску с равномерными квадратами.Кроме того, я видел, как некоторые люди рисуют шаблоны в GIMP, но не на весь экран.

OpenCV имеет функцию drawChessboardCorners, но для него требуются основанные углы из предыдущих импортированных изображений, которые необходимо откалибровать, поэтому я думаю, что это не имеет смысла.

Если у кого-то есть идея, как решить эту проблему, с помощью какой-либо программы или модуля на каком-либо языке программирования (если возможно, на Python), я был бы признателен.

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

Я нашел только модуль черепахи, который, кажется, только для рисования на части экрана, и он всегда рисует стрелку на последнем квадрате.

Давайте обойдемся без этих двух проблем, нарисовав сетку в окне размером с экран без стрелки на последнем квадрате:

from turtle import Screen, Turtle

BLOCK_SIZE = 72  # pixels
CURSOR_SIZE = 20  # pixels

BORDER = 1  # blocks

screen = Screen()
screen.setup(1.0, 1.0)  # display size window
width, height = screen.window_width(), screen.window_height()
screen.setworldcoordinates(0, 0, width, height)

block = Turtle('square', visible=False)  # hide the cursor completely
block.pencolor('black')
block.shapesize(BLOCK_SIZE / CURSOR_SIZE)
block.penup()

x_count = width // BLOCK_SIZE - BORDER * 2
x_width = x_count * BLOCK_SIZE
x_start = (width - x_width) // 2
x_limit = x_width + (BORDER + 1) * BLOCK_SIZE

y_count = height // BLOCK_SIZE - BORDER * 2
y_height = y_count * BLOCK_SIZE
y_start = (height - y_height) // 2
y_limit = y_height + (BORDER + 1) * BLOCK_SIZE

screen.tracer(False)

for parity_y, y in enumerate(range(y_start, y_limit, BLOCK_SIZE)):
    block.sety(y)

    for parity_x, x in enumerate(range(x_start, x_limit, BLOCK_SIZE)):
        block.fillcolor(['white', 'black'][(parity_y % 2) == (parity_x % 2)])
        block.setx(x)
        block.stamp()

screen.tracer(True)
screen.mainloop()

(Скройте свою док-станцию ​​в OS X, если хотите охватить еще большую часть экрана.)

К сожалению, это рисует в пиксель единицах, что является произвольным. См. Мой ответ о рисовании в стандартизированной мере с использованием значения шага пикселя вашего дисплея.

0 голосов
/ 29 мая 2019

Вот простой код для генерации шахматной фигуры. Однако диаметр шахматной доски указан в пикселях.

import numpy as np

h = 6
w = 8
size = 100
checkerboard = 255.0 * np.kron([[1, 0] * (w//2), [0, 1] * (w//2)] * (h//2), np.ones((size, size)))
0 голосов
/ 23 мая 2019

Подготовьте ваш рисунок шахматной доски в вашем любимом графическом редакторе, сохраните файл на компьютере, который вы хотите использовать, чтобы отобразить его для калибровки, а затем просто отобразите его при необходимости. Я думаю, что вы, возможно, слишком обдумываете проблему ...

...