OpenCV isContinuous()函数简析

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV isContinuous()函数简析相关的知识,希望对你有一定的参考价值。

isContinuous()函数

cv::Mat::isContinuous()

返回为bool值,判断存储是否连续。

这里连续的 意思是行与行之间的储存是否衔接。也就是说1*11*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,列数就是所有像素

以上是关于OpenCV isContinuous()函数简析的主要内容,如果未能解决你的问题,请参考以下文章

opencv之访问图像像素

opencv矩阵数据是不是保证是连续的?

Mat 类简析

SIFT特征原理简析(HELU版)

简析四大函数

简析this指向