isContinuous()函数
cv::Mat::isContinuous()
返回为bool值,判断存储是否连续。
这里连续的 意思是行与行之间的储存是否衔接。也就是说1*1和1*N的数据肯定是连续的,而m*n的数据就是需要判断连续性的。
如果数据存储是连续的,可以将图像看出一个一维数组。否则只能用二维数据方式进行访问。
一般用Mat::creat()创建的矩阵都是连续的,但是也不绝对,依然需要判断才可以进行连续性操作。而从图像中截取的图像通常是不连续的,如果想将其转换为连续存储,可以用clone进行拷贝一份.
案例
例如下面代码
Mat image = imread("test2.jpg"); // 获取图像宽、高 int channels = image.channels(); int rows = image.rows; int cols = image.cols * channels; // isContinuous()函数,返回bool值,判断存储是否连续。 if (image.isContinuous()) { cols *= rows; rows = 1; }
如果数据存储是不连续的就直接获得矩阵的行数和列数。如果是连续的,行数就是1,列数就是所有像素