python - 在满足条件的情况下找到与另一个像素相关的最近像素的最快方法。 OpenCV NumPy

标签 python performance numpy opencv optimization

我正在寻找读取图像、指定像素并在给定条件的情况下找到距离该像素最近的像素的最快方法。

我最初有一个嵌套循环,它会遍历我的 2D 图像数组中的每个像素,检查条件,然后将其添加到新数组。比遍历新数组并对每个成员进行距离计算。 那太慢了,我相信时间复杂度为 n^2。

我现在正在计算距离,并以此对数组进行排序,这在使用 numpy 时非常快。但是我仍然必须通过嵌套循环遍历 2D 排序数组来检查条件,这又是 n^2 的时间复杂度。它确实节省了一些时间,因为我通常可以在阵列中更快地找到我正在寻找的像素。

img2=cv2.imread(filename)
distances = numpy.sqrt((img2[:,:] - currR) ** 2 + (img2[:,:] - currC) ** 2)
nearest = numpy.sort(distances)
for row in range(nearest.shape[0]):
    for col in range(nearest.shape[1]):
        if pixelInLine[row*imgCol + col] == 0  and colorCheck(row,col) and numpy.any(img2[row, col] != 0):
            #do my calculations on the specified pixel. and break the loop

我不确定如何进一步优化它,并可能将时间复杂度从 n^2 降低到更合理的水平。

最佳答案

远离目标像素,一旦满足“条件”就停止。为方便起见,您可以使用正方形螺旋(实际上是嵌套正方形)。

如果距离是欧氏距离,则搜索成本将在 2d² 和 4d² 之间,其中 d 是到命中点的距离。

关于python - 在满足条件的情况下找到与另一个像素相关的最近像素的最快方法。 OpenCV NumPy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892849/

相关文章:

python - 在 Python 中打印字典列表中键的值

python - 我需要什么版本的软件包?

ios - CALayer性能不佳?

python-3.x - 用 numpy 生成 8 位图像

python - 从 Excel 读取时如何替换标题行 - Python

python - 在同一行上获取多个整数作为 python 中用户的输入

python - 重命名未命名的列 Pandas 数据框

python - 在 numpy 数组中高效插入未对齐的元素

c++ - 对于受 CPU 限制的应用程序,您会推荐哪种语言/平台?

python - 将行添加到 numpy recarray