不知道用什么输入来得到cv2.calcOpticalFlowPyrLK方法工作



我试图在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)

相关内容

  • 没有找到相关文章

最新更新