0

我需要在监控摄像头下测量传送带的速度。皮带穿了多年,基本上没有质感,如果上面什么都没有,甚至很难看出皮带是否在移动。

我正在尝试将此问题作为对象跟踪问题来解决:

  1. 在腰带上找到一些关键点/对象。
  2. 使用 OpenCV 的中值流跟踪器跟踪这些关键点/对象。
  3. 逆透视变换并获得 3D 空间中的速度。

如果手动给出第 1 步中的关键点/对象,则第 2 步和第 3 步工作得很好,但是我在自动查找关键点时遇到了性能问题:即使我将图像裁剪成非常小的图像,关键点检测也会花费 60 毫秒以上。我尝试了在 OpenCV 中实现的 SURF 和 ORB,但都不够快。

还有其他更快的选择吗?

4

1 回答 1

0

也许您可以尝试使用 FAST 算法进行角点检测。它比您尝试过的选项更快。它在opencv中实现。这是直接从 opencv 文档 ( https://docs.opencv.org/master/df/d0c/tutorial_py_fast.html ) 中提取的示例代码:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('simple.jpg',0)

# Initiate FAST object with default values
fast = cv.FastFeatureDetector_create()

# find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))

# Print all default params
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )
cv.imwrite('fast_true.png',img2)

# Disable nonmaxSuppression
fast.setNonmaxSuppression(0)

kp = fast.detect(img,None)

print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
cv.imwrite('fast_false.png',img3)
于 2021-02-08T10:11:44.060 回答