无法弄清楚要使用什么输入才能使 cv2.calcOpticalFlowPyrLK 方法起作用
Cannot figure out what input to use to get cv2.calcOpticalFlowPyrLK method to work
我正在尝试在 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)
然后我得到了错误。
我必须创建什么 calcOpticalFlowPyrLK 方法可以接受的 numpy 数组?
来自文档:
prevPts – vector of 2D points for which the flow needs to be found;
point coordinates must be single-precision floating-point numbers
所以 p0 必须是二维点的向量:
p0 = [[x0, y0], [x1, y1], [x2, y2]]
所以只要你的一点,我希望它能起作用:
p0 = [[348.0, 251.0]]
我认为你只是用了太多的括号然后又用的太少了。
供opencv3使用
p0=np.array([[348.0, 251.0]],np.float32)
我正在尝试在 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)
然后我得到了错误。
我必须创建什么 calcOpticalFlowPyrLK 方法可以接受的 numpy 数组?
来自文档:
prevPts – vector of 2D points for which the flow needs to be found; point coordinates must be single-precision floating-point numbers
所以 p0 必须是二维点的向量:
p0 = [[x0, y0], [x1, y1], [x2, y2]]
所以只要你的一点,我希望它能起作用:
p0 = [[348.0, 251.0]]
我认为你只是用了太多的括号然后又用的太少了。
供opencv3使用
p0=np.array([[348.0, 251.0]],np.float32)