我是一个 Python 和 OpenCV 的新手。我正在处理 OpenCV 优化,并找到了使用 OpenCV 测量性能的网站。我看到了 cv2.getTickCount
和 cv2.getTickFrequency
,并在一个空的视频捕获代码上进行了尝试:
import cv2
cap = cv2.VideoCapture(0)
time1 = 0
while True:
e1 = cv2.getTickCount()
ret, frame = cap.read()
cv2.imshow("cam", frame)
e2 = cv2.getTickCount()
time1 = (e2 - e1) / cv2.getTickFrequency() + time1
print time1
k = cv2.waitKey(1) & 0xFF
if k == ord('q'):
break
同时,我尝试使用time.time()
来测量性能:
import cv2
import time
cap = cv2.VideoCapture(0)
t_start = time.time()
time1 = 0
while True:
e1 = cv2.getTickCount()
ret, frame = cap.read()
cv2.imshow("cam", frame)
e2 = cv2.getTickCount()
time1 = (e2 - e1) / cv2.getTickFrequency() + time1
elapsedTime = time.time()-t_start
print [time1, elapsedTime]
k = cv2.waitKey(1) & 0xFF
if k == ord('q'):
break
elapsedTime
和time1
之间存在巨大的区别,例如:
[23.544186313842033, 29.413000106811523]
[23.588920849343307, 29.460999965667725]
[23.636793986833897, 29.51200008392334]
[23.669538024648435, 29.558000087738037]
[23.701628712445952, 29.605000019073486]
[23.737225731551163, 29.65499997138977]
[23.775527056696312, 29.703999996185303]
[23.82555789141547, 29.765000104904175]
[23.864218735017026, 29.813999891281128]
[23.901782255564854, 29.861000061035156]
我检查了两个输出,我的手机计时器与time.time()
的计时一致。
我的问题是:
- 为什么会有这种差异?
cv2.getTickCount
和cv2.getTickFrequency
与time.time()
有何不同之处? - 要进行性能测量,应该使用哪一个?
time.time()
和time1
使用了 1000 个样本。如果我在每次循环中打印结果,则这两段代码之间的差异会变大。与此同时,如果我在最后打印最终结果,则结果更有意义。 - aubatmaz