>step简介
OpenCV中使用Mat类是一个N维的数组对象,用于装载图像数据,对二维图像来说就是一个二维数组。Mat对象有cols、rows、step、size、data、dims等属性,其中的step是个数组,用于存储每一维元素的大小(单位字节),如step[0]就是一维元素的个数,具体到图像来说,step[0]就是图像每行像素占用的字节数,step[1]就是每列像素占用的字节数。
>问题
最近笔者在研究图像CLAHE算法,发现可以将数组step转换为一个整数输出,按理说这种转换应该输出数组的内存地址,但实际输出的确实step的第一个元素。
具体来看如下代码:
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <stdio.h>
int main(int argc, char* argv[])
{
//从文件中读入图像
if (argc != 2)
{
printf("程序必须带一个图像文件名参数!");
return -1;
}
Mat img = imread(argv[1]);
if (!img.data)
{
printf("加载图像文件没有成功,请确认图像文件 %s 是否存在!", argv[1]);
return -1;
}
printf("图像的分辨率为:%d×%d\n", img.cols, img.rows);
printf("step =%X,stepCast =%d,step[0]=%d,step[1]=%d\n", img.step, static_cast<int>(img.step), img.step[0], img.step[1]);
return 0;
}