要绘制全屏棋盘图案吗?

时间:2019-05-23 12:32:36

标签: python python-3.x opencv camera-calibration

我正在使用 OpenCV (摄像机校准,然后创建3d模型),直到现在,我始终在纸上打印一个棋盘格图案,然后拍摄校准所需的照片。我试图找到一种以预定义的正方形尺寸在全屏上绘制图案的方法(这样我就可以在校准过程中设置该正方形尺寸),但是我只发现了Python turtle模块,该模块似乎仅用于绘制图形屏幕的一部分,并且总是在最后一个正方形上绘制箭头。我需要从屏幕边框上绘制一些小偏移量的图案,并在这些偏移量内绘制具有统一正方形的棋盘。另外,我看到有人在GIMP中绘制图案,但不是全屏显示。

OpenCV具有功能drawChessboardCorners,但是它需要从以前导入的图像中建立角点,因此需要对其进行校准,因此我认为这没有任何意义。

如果有人对使用某种编程语言(如果可能的话,使用Python)或某个程序或模块来解决此问题有想法,我将不胜感激。

3 个答案:

答案 0 :(得分:0)

在喜欢的图形编辑器中准备棋盘图案,将文件保存到要用于显示以进行校准的计算机上,然后仅在需要时显示它。我认为您可能会考虑这个问题...

答案 1 :(得分:0)

  

我只发现了乌龟模块,它似乎仅用于零件绘图   屏幕,它总是在最后一个正方形上绘制箭头。

我们省去了这两个问题,方法是在窗口大小的窗口中绘制一个网格,最后一个正方形上没有箭头:

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中隐藏扩展坞。)

不幸的是,这是以 pixel 单位绘制的,该单位是任意的。使用显示器的像素间距值查看关于drawing in a standardized measure的答案。

答案 2 :(得分:0)

这是用于生成棋board图案的简单代码。但是,棋盘的直径以像素为单位。

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)))