python-OpenCV尋找角點findChessBoardCorners

 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一下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章