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,列数就是所有像素
联系客服