【发布时间】:2016-06-11 18:41:27
【问题描述】:
好的,经过几个小时关于图像处理主题的文档(我是初学者),我决定自己实现一个边缘检测功能,以更好地理解其背后的数学原理。幸运的是我能够做到,但我的算法太慢了(O(n ^ 2))。我将在下面发布带有帧处理部分的代码:
ret, frame = cap.read()
grayed = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rows, cols = grayed.shape
for row in range(rows-2):
for col in range(cols-2):
Gx = grayed.item(row+2,col)+2*grayed.item(row+2,col+1)+grayed.item(row+2,col+1)-(grayed.item(row,col)+2*grayed.item(row,col+1)+grayed.item(row,col+2))
Gy = grayed.item(row,col+2)+2*grayed.item(row+1,col+2)+grayed.item(row+2,col+1)-(grayed.item(row,col)+2*grayed.item(row+1,col)+grayed.item(row+2,col))
grad = math.sqrt(Gx**2 + Gy**2)
grayed.itemset((row, col), grad)
cv2.imshow('frame', grayed)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
提前致谢!
【问题讨论】:
-
我不是python专家,但我会从bumpy开始使用ndarray,它应该会加速这个过程。
-
您能否提供更多关于您传递给此函数的数据类型的信息?也许发布一个小例子。我相信您可以使用 numpy 或 numpy 和 Cython 的组合来大大加快速度。使用 Cython 将使您接近 C 速度。这当然只会改变算法的运行时间,但仍然是 O(n^2)。
-
我已经编辑了我的帖子。我开始使用灰度图像而不是未触及的框架,它确实加快了我的进程。我也删除了内核创建,因为它根本没有用。问题是它仍然不够快。
-
我认为它与代码审查有关:codereview.stackexchange.com
-
@AndreySmorodov 你读过他们的on-topic help centre?
标签: python opencv image-processing