python - 二维多边形的交集

标签 python opencv numpy

我有两个 OpenCV convex hulls 的 numpy 数组,我想在不创建 for 循环或创建图像并对它们执行 numpy.bitwise_and 的情况下检查交集,两者其中在 Python 中相当慢。数组看起来像这样:

[[[x1 y1]]
 [[x2 y2]]
 [[x3 y3]]
...
 [[xn yn]]]

将 [[x1 y1]] 视为一个元素,我想在两个 numpy ndarray 之间执行交集。我怎样才能做到这一点?我发现了一些类似性质的问题,但我无法从那里找出解决方案。

最佳答案

您可以像这样将数组 View 用作 intersect1d 函数的单一维度:

def multidim_intersect(arr1, arr2):
    arr1_view = arr1.view([('',arr1.dtype)]*arr1.shape[1])
    arr2_view = arr2.view([('',arr2.dtype)]*arr2.shape[1])
    intersected = numpy.intersect1d(arr1_view, arr2_view)
    return intersected.view(arr1.dtype).reshape(-1, arr1.shape[1])

这将创建每个数组的 View ,将每一行更改为值的元组。然后它执行交集,并将结果更改回原始格式。这是一个使用它的例子:

test_arr1 = numpy.array([[0, 2],
                         [1, 3],
                         [4, 5],
                         [0, 2]])

test_arr2 = numpy.array([[1, 2],
                         [0, 2],
                         [3, 1],
                         [1, 3]])

print multidim_intersect(test_arr1, test_arr2)

这打印:

[[0 2]
 [1 3]]

关于python - 二维多边形的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269681/

相关文章:

python - LSTM 预处理 : Build 3d arrays from pandas data frame based on ID

python - 如何使用每行的索引矩阵来索引矩阵的行元素?

python - 输出用户输入的每个单词的首字母

python - 如何在python中重命名键值

python - 导入错误 : No module named pyttsx

opencv - 构建 OpenCV 时出现 Cmake 错误

Python 列表中的 append 元素随着其原始变量的变化而变化

opencv - 错误:不支持视频格式,尝试在捕获的帧上执行操作并保存视频时发生

python - 如何将函数映射到 opencv 图像中的 RGB 值

python - 将 OpenCV IplImage* 数据转换为 numpy 数组