【发布时间】:2014-03-27 10:46:06
【问题描述】:
我正在用 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 不是很习惯,所以性能这么慢是正常的和意料之中的吗?
【问题讨论】:
-
可以使用
numpy.where语句合并比较操作。 -
您的担心是对的。如果您发现数组性能很慢,请检查您是否使用快速排序作为迭代方向。阅读来自docs.scipy.org/doc/numpy/reference/internals.html 的订购文档