为什么OpenCV图像Mat矩阵的step属性能转换为整数输出?

本文探讨了OpenCV中Mat对象的step属性,它表示每行像素占用的字节数。在尝试将step转换为整数时,发现输出结果与step[0]相同,即图像的宽度乘以像素字节数。作者通过代码示例展示了这一现象,并对不能直接转换其他数组的原因感到困惑。最后,文章提到了对此问题的解答来源,一篇由老猿大哥撰写的关于OpenCV step属性深入分析的文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>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;   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CP猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值