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

 


版权声明:本文为qq_35565669原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。