Mat::checkVector 在 OpenCV 中做什么?
What does Mat::checkVector do in OpenCV?
我尝试在 OpenCV (C++) 中使用以下函数
calcOpticalFlowPyrLK(prev_frame_gray, frame_gray, points[0], points[1], status, err, winSize, 3, termcrit, 0, 0.001);
我收到这个错误
OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK,
file /home/rohit/OpenCV_src/opencv-2.4.9/modules/video/src/lkpyramid.cpp, line 845
terminate called after throwing an instance of 'cv::Exception'
what(): /home/rohit/OpenCV_src/opencv-2.4.9/modules/video/src/lkpyramid.cpp:845:
error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK
以下两项return-1
frame_gray.checkVector(2, CV_32F, true)
prev_frame_gray.checkVector(2, CV_32F, true)
我想知道 checkVector 实际做了什么,因为它会导致断言错误,正如您在上面看到的那样。
OpenCV 的官方文档说:
cv::Mat::checkVector()
returns N if the matrix is 1-channel (N x
ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise
OpenCV 认为某些数据类型在某些函数的情况下是等效的,即 cv::solvePnP()
的 objectPoints
可以是:
- 1xN/Nx1 1 通道
cv::Mat
- 3xN/Nx3 3 通道
cv::Mat
std::vector<cv::Point3f>
使用 checkVector
,您可以确保传递正确的数据表示。
我对 cv2.projectPoints 函数有类似的问题(-215:断言失败),因为 openCV 需要一个 nx3 矩阵,而我传递的是一个长度为 3 的一维数组。尝试:
points[0].reshape(-1,3)
作为函数的参数。它将形状 (3,) 更改为形状 (1,3)。
我尝试在 OpenCV (C++) 中使用以下函数
calcOpticalFlowPyrLK(prev_frame_gray, frame_gray, points[0], points[1], status, err, winSize, 3, termcrit, 0, 0.001);
我收到这个错误
OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK,
file /home/rohit/OpenCV_src/opencv-2.4.9/modules/video/src/lkpyramid.cpp, line 845
terminate called after throwing an instance of 'cv::Exception'
what(): /home/rohit/OpenCV_src/opencv-2.4.9/modules/video/src/lkpyramid.cpp:845:
error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK
以下两项return-1
frame_gray.checkVector(2, CV_32F, true)
prev_frame_gray.checkVector(2, CV_32F, true)
我想知道 checkVector 实际做了什么,因为它会导致断言错误,正如您在上面看到的那样。
OpenCV 的官方文档说:
cv::Mat::checkVector()
returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise
OpenCV 认为某些数据类型在某些函数的情况下是等效的,即 cv::solvePnP()
的 objectPoints
可以是:
- 1xN/Nx1 1 通道
cv::Mat
- 3xN/Nx3 3 通道
cv::Mat
std::vector<cv::Point3f>
使用 checkVector
,您可以确保传递正确的数据表示。
我对 cv2.projectPoints 函数有类似的问题(-215:断言失败),因为 openCV 需要一个 nx3 矩阵,而我传递的是一个长度为 3 的一维数组。尝试:
points[0].reshape(-1,3)
作为函数的参数。它将形状 (3,) 更改为形状 (1,3)。