Performance in numpy



我正在用python编写一个方法,该方法通过OpenCV的手段,它处理来自相机的一些图像,并将该图像与一些参数逐像素进行比较,并根据这些参数,将该像素归零。这段代码是这样做的:

while True:
ret, frame = cap.read()                      # retrieve image from the camera
for row in range(rows):
  for col in range(cols):
    b1 = (frame[row][col][:] < Nsigma2[row][col][:]).all();
    b2 = (frame[row][col][:] > Psigma2[row][col][:]).all();
    if not b1 and not b2:
      frame[row][col][:] = [0,0,0];
    cv.imshow('frame',frame)                   #show the processed image
    if cv.waitKey(15) & 0xFF == ord('q'):
      break

除了算法本身的正确性之外,这是遍历和访问numpy矩阵的正确方法吗?但这是非常缓慢的。我认为最慢的方向是矩阵的第三个分量,我在内环中访问它,但我找不到更好的方法。我不是很习惯Python,所以,这是正常的和预期的缓慢性能?

让你慢下来的很可能是循环,这不是Python的优势之一。除此之外,我怀疑记忆访问是否相关。您可以对处理进行矢量化,并一次完成所有操作,让numpy在内部循环遍历这些值。这三行:

b1 = np.all(frame < NSigma2, axis=-1)
b2 = np.all(frame > PSigma2, axis=-1)
frame[~(b1 | b2)] = 0

可以取代你的两个嵌套循环。您将无法看到图像逐像素处理,尽管您现在似乎正在这样做。

相关内容

  • 没有找到相关文章

最新更新