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

Python 无需绘图即可获得cv2.line像素坐标(寻找速度提升)?,python,opencv,Python,Opencv,根据标题,我正在尝试获取一个坐标列表,该列表用于在cv2的2个坐标之间生成的直线。我对情节本身不感兴趣,似乎必须实际划清界限,然后找到匹配的坐标可能是不必要的开销。以上是使用这种方法我能想到的最快的实现(这是一个玩具示例) 我试图坚持使用“opencv将产生的”结果,以避免在以后使用opencv本身绘图时出现与值不一致的情况(我不确定opencv使用的不同算法之间的确切像素位置是否会有所不同) 编辑:我稍微编辑了这个问题,以表达我有一种方法(通过绘制和提取),但我希望加快速度,并认为消除绘制然后

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

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


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

如果cv2绘制了线,而您从图像中提取了线,结果会如何?Shape,array…@Mace这就是我在上面的代码示例中所做的(如果我理解正确的话)。我试图让它运行得更快(在实际情况下,需要处理的行数要多得多)。我认为画画然后提取是一种低效的方法,但也许我的实现是低效的……如果你只是画了一条特定颜色的线,然后使用np。在哪里找到这种颜色的点呢?这很有意思,但你只有1/16581375次机会(1/255*255*255)错误地采样一个不相关的样本point@Nicolas这就是我在上面的代码示例中所做的(如果我理解正确的话)。我试图让它运行得更快(在实际情况下,需要处理的行数要多得多)。我认为画画然后提取是一种低效的方法,但可能是我的实现低效了……好吧,这是最简单的方法,如果cv2画了线,你从图像中提取出来,结果会是什么?Shape,array…@Mace这就是我在上面的代码示例中所做的(如果我理解正确的话)。我试图让它运行得更快(在实际情况下,需要处理的行数要多得多)。我认为画画然后提取是一种低效的方法,但也许我的实现是低效的……如果你只是画了一条特定颜色的线,然后使用np。在哪里找到这种颜色的点呢?这很有意思,但你只有1/16581375次机会(1/255*255*255)错误地采样一个不相关的样本point@Nicolas这就是我在上面的代码示例中所做的(如果我理解正确的话)。我试图让它运行得更快(在实际情况下,需要处理的行数要多得多)。我认为画图然后提取是一种低效的方法,但也许是我的实现低效了……好吧,这是最简单的方法
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)