无需绘图即可获得cv2.line像素坐标(寻找速度提升)?

2024-09-18 15:22:04 发布

您现在位置:Python中文网/ 问答频道 /正文

def func_get_line_coords(blank_canvas, coord_pairs_to_draw):

    to_return = list()
    for idx, coord_pair in enumerate(coord_pairs_to_draw):
        cv2.line(blank_canvas, coord_pair[0], coord_pair[1], idx+1, 1)
        to_return.append(np.argwhere(blank_canvas==idx+1))
    return to_return

blank_canvas = np.zeros((1000,1000), dtype=np.uint8)
coord_pairs_to_draw = [[(23, 76), (900, 4)], [(890, 640), (32, 500)], [(876, 43), (29, 900)], [(1, 3), (709, 82)], [(47, 23), (900, 900)]]
pixel_coords = func_get_line_coords(blank_canvas, coord_pairs_to_draw)

根据标题,我正在尝试获取一个坐标列表,该列表用于在cv2的2个坐标之间生成的直线。我对情节本身不感兴趣,似乎必须实际划清界限,然后找到匹配的坐标可能是不必要的开销。以上是使用这种方法我能想到的最快的实现(这是一个玩具示例)

我试图坚持使用“opencv将产生的”结果,以避免在以后使用opencv本身绘图时出现与值不一致的情况(我不确定opencv使用的不同算法之间的确切像素位置是否会有所不同)

编辑:我稍微编辑了这个问题,以表达我有一种方法(通过绘制和提取),但我希望加快速度,并认为消除绘制然后阅读可能是一种方法