我正在使用 OpenCV (摄像机校准,然后创建3d模型),直到现在,我始终在纸上打印一个棋盘格图案,然后拍摄校准所需的照片。我试图找到一种以预定义的正方形尺寸在全屏上绘制图案的方法(这样我就可以在校准过程中设置该正方形尺寸),但是我只发现了Python turtle模块,该模块似乎仅用于绘制图形屏幕的一部分,并且总是在最后一个正方形上绘制箭头。我需要从屏幕边框上绘制一些小偏移量的图案,并在这些偏移量内绘制具有统一正方形的棋盘。另外,我看到有人在GIMP中绘制图案,但不是全屏显示。
OpenCV具有功能drawChessboardCorners
,但是它需要从以前导入的图像中建立角点,因此需要对其进行校准,因此我认为这没有任何意义。
如果有人对使用某种编程语言(如果可能的话,使用Python)或某个程序或模块来解决此问题有想法,我将不胜感激。
答案 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)))