在OpenCV中,我能够使用C ++中的VideoCapture捕获帧,但是,当我尝试从帧中获取数据并计算长度时,它只返回0。
以下是我的示例代码:
VideoCapture cap(0);
for(;;) {
Mat frame;
cap >> frame;
int length = strlen((char*) frame.data); // returns 0
}
正如我上面提到的,如果我将帧保存在PNG文件中,我实际上可以看到图像,所以我无法理解为什么数据长度为零。
有任何线索吗?
答案 0 :(得分:7)
strlen方法仅适用于字符串,字符串是由特殊字符终止的字符数组:
http://www.cplusplus.com/reference/cstring/strlen/
您已将Mat
类型转换为char*
,因此它不是字符串。
在解决方案here的基础上,尝试:
Mat mat;
int rows = mat.rows;
int cols = mat.cols;
int num_el = rows*cols;
int len = num_el*mat.elemSize1();
以字节为单位获取一个通道的大小。另外,如果您想要所有频道,请使用elemSize()
(例如,如果elemSize1()
是3频道图片,您将获得Mat
值的3倍)。
在这里查看Mat
可以包含的各种类型的讨论:
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-type
答案 1 :(得分:5)
你也可以这样做:
Mat mat;
int len = mat.total() * mat.elemSize(); // or mat.elemSize1()