我試圖用Python和openCV來測量視頻中兩個對象之間的距離(以像素爲單位)。我到目前爲止的代碼找到了兩個對象,並測量了第一幀中兩個對象之間的距離,但並不是隨着對象在視頻中移動而持續。我對OpenCV和Python都很新,所以任何幫助都非常感謝。測量視頻中兩個輪廓之間的距離? OpenCV Python
import numpy as np
import cv2
import matplotlib.pyplot as plt
cap = cv2.VideoCapture('new4.avi')
centers=[]
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 127,255,0)
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
# If contours are too small or large, ignore them:
if cv2.contourArea(c)<100:
continue
elif cv2.contourArea(c)>2000:
continue
cv2.drawContours(frame, [c], -1, (0,255,0), 3)
# Find center point of contours:
M = cv2.moments(c)
cX = int(M['m10'] /M['m00'])
cY = int(M['m01'] /M['m00'])
centers.append([cX,cY])
# Find the distance D between the two contours:
if len(centers) >=2:
dx= centers[0][0] - centers[1][0]
dy = centers[0][1] - centers[1][1]
D = np.sqrt(dx*dx+dy*dy)
print(D)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
如何隨着物體在視頻中的移動而連續獲得距離D?
你有什麼問題? D在第一幀之後的幀值是多少? – Soltius
D值是295,這是第一幀中的像素距離,但當對象移動時,即使對象移近,D值也會在295處保持不變。 – agrom
我從來沒有使用過視頻,所以我不知道cap.read()是如何工作的,但我認爲每次while循環都會讀取下一幀?你檢查了嗎?通過移動循環內的imshow(frame),例如 – Soltius