参考链接:
https://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html#a39541d4dbd7fafbfae93f1737e51ffbc (Mat类参考手册)
https://www.cnblogs.com/drunknbeard/p/9671451.html(checkVector()源码实现)
checkVector是opencv里Mat类的成员函数,用于返回符合要求的矩阵中的元素个数。
下列示例代码中Mat类对象定义的含义为mat ( rows, columns, channels ),即(行数,列数,通道数)
-
行数或列数为1,且通道数为1的情况下,checkVector输入参数为1时返回元素个数20,输入其他参数值时返回-1。
cv::Mat mat(20, 1, CV_32FC1);
int n = mat.checkVector(1); // n=20
cv::Mat mat(1, 20, CV_32FC1);
int n = mat.checkVector(1); // n=20
-
通道数为2且行数或列数为1,或者通道数为1且行数或列数为2的情况下,checkVector输入参数为2时返回元素个数20,输入其他参数值时返回-1。
cv::Mat mat(20, 1, CV_32FC2);
int n = mat.checkVector(2); // n=20
cv::Mat mat(1, 20, CV_32FC2);
int n = mat.checkVector(2); // n=20
cv::Mat mat(20, 2, CV_32FC1);
int n = mat.checkVector(2); // n=20
cv::Mat mat(2, 20, CV_32FC1);
int n = mat.checkVector(2); // n=20
-
情况同2,不做赘述。
cv::Mat mat(20, 1, CV_32FC3);
int n = mat.checkVector(3); // n=20
cv::Mat mat(1, 20, CV_32FC3);
int n = mat.checkVector(3); // n=20
cv::Mat mat(20, 3, CV_32FC1);
int n = mat.checkVector(3); // n=20
cv::Mat mat(3, 20, CV_32FC1);
int n = mat.checkVector(2); // n=20
综上,checkVector能正确返回矩阵中的元素个数值时,必然满足:
- 行数、列数和通道数中必有一个为1;
- 其余二者必有一个与checkVector的输入参数一致。