OpenCV Mat对象 - 获取数据长度

pre*_*ree 5 c++ opencv

在OpenCV中,我能够使用C++中的VideoCapture捕获帧,但是,当我尝试从帧中获取数据并计算长度时,它只返回0.

以下是我的示例代码:

VideoCapture cap(0);
for(;;) {
  Mat frame;
  cap >> frame;
  int length = strlen((char*) frame.data); // returns 0
}
Run Code Online (Sandbox Code Playgroud)

正如我上面提到的,如果我将帧保存在PNG文件中,我实际上可以看到图像,所以我无法理解为什么数据长度为零.

任何线索?

Mat*_*ttG 7

strlen方法仅适用于字符串,字符串是由特殊字符终止的字符数组:

http://www.cplusplus.com/reference/cstring/strlen/

您已将Mat类型转换为a char*,因此它不是字符串.

在解决方案构建在这里,请尝试:

Mat mat;
int rows = mat.rows;
int cols = mat.cols;
int num_el = rows*cols;
int len = num_el*mat.elemSize1();
Run Code Online (Sandbox Code Playgroud)

以字节为单位获取一个通道的大小.此外,elemSize()如果您想要所有通道,请使用(即,elemSize1()如果Mat是3通道图像,您将获得3倍的值).

看看这里讨论的各种类型Mat可以包含:

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-type


Asa*_*lle 6

你也可以这样做:

Mat mat;
int len = mat.total() * mat.elemSize(); // or mat.elemSize1()
Run Code Online (Sandbox Code Playgroud)