DIY一個python畫棋盤格的代碼(改colors的順序,可以改變黑白顏色出現的次序)
def draw_chessboard(row, col, size):
img = np.zeros([(row+1)*size, (col+1)*size])
colors = [0, 255]
for i in range(row+1):
for j in range(col+1):
img[i*size:(i+1)*size, j*size:(j+1)*size] = colors[j % 2]
colors = colors[::-1]
cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()
畫出的棋盤有row個格點行,有col個格點列,size爲每個格子的邊長。
draw_chessboard(3, 3, 100)
畫出的棋盤格效果如下圖
尋找格點位置的程序如下,findChessBoardCorners接受的參數爲img,size=(格點行數,格點列數)
def find_chessboard(img_path, size):
assert os.path.exists(img_path)
img = cv.imread(img_path)
ok, corners = cv.findChessboardCorners(img, size, None)
print(corners.shape)
if ok:
for pt in corners:
point = pt[0]
print(point)
cv.circle(img, center=(int(point[0]), int(point[1])), radius=10, color=(0, 0, 255), thickness=-1)
cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()
else:
print 'cannot find chessboard points'
程序的輸出結果如下圖
(9L, 1L, 2L)
[99.5 99.5]
[199.5 99.5]
[299.5 99.49999]
[ 99.50001 199.5 ]
[199.5 199.5]
[299.5 199.5]
[ 99.49999 299.5 ]
[199.5 299.5]
[299.5 299.5]
在原圖上的效果如下圖。可以看出findChessboardCorners這個方法找出的點是按照圖像中的橫向排列的,因爲使用的圖像是比較規則的,實際拍攝的圖像找的格點的排列順序並不一定是從上到下,從左到右,還要check一下。