我试图在Python OpenCV中制作一个程序,用户可以在视频和光流上定义点来跟踪它。
我试图以numpy数组的形式创建自己的坐标,并试图将其传递到OpenCV中的calcOpticalFlowPyrLK方法,但我得到了一个错误:
Traceback (most recent call last):
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, d, None, **lk_params)
error: /build/buildd/opencv-2.4.8+dfsg1/modules/video/src/lkpyramid.cpp:593:
error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK
我代码:# params for ShiTomasi corner detection
feature_params = dict( maxCorners = 1,
qualityLevel = 0.01,
minDistance = 10,
blockSize = 7 )
p0 = np.array([[[348.0, 251.0]]])
# calculate optical flow
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)
我知道这是由p0变量引起的因为如果我让p0为
p0 = cv2.goodFeaturesToTrack(old_gray, mask = mask_use, **feature_params)
并将其传递给calcOpticalFlowPyrLK参数,它可以工作。然而,我试图使一个程序,其中用户定义的点,所以如果我创建我自己的坐标,并传递p0到calcOpticalFlowPyrLK参数,像这样:
d = np.array([[[348.0, 251.0]]])
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, d, None, **lk_params)
然后我最终得到错误。
我必须创建什么numpy数组calcOpticalFlowPyrLK方法会接受?
From the docs:
prevPts—需要找到流的2D点的向量;点坐标必须是单精度浮点数
所以p0一定是二维点的向量:
p0 = [[x0, y0], [x1, y1], [x2, y2]]
所以只有你的一点,我希望这能起作用:
p0 = [[348.0, 251.0]]
供openv3使用p0=np.array([[348.0, 251.0]],np.float32)