OpenCV Mat创建矩阵体时易错点(create、zeros方法注意事项)

首先明白一点,cv::Mat是一个矩阵图像类,它的确有两部分组成:
1)矩阵头:包含矩阵的尺寸、存储方法、存储地址等信息和一个指向存储图像中所有像素的矩阵体
2)矩阵体

在一次项目中,我预先声明了一个Mat对象,此时只创建了图像矩阵的信息头部分,并没有创建矩阵体
后来在要申请矩阵实体的内存时,遇到了两个问题

问题一 使用create创建矩阵实体

使用create方法来创建矩阵实体时,无法对实体中的内容进行初始化,此时默认的位值为1(每一个bit的值都是1),所以每个像素的double值读出来的值为最大值(负值最大值),而我的程序需要在原来的像素值再加上一个值,此时发生溢出,所以,无论我怎么加值,每一个像素的值都是同一个值(负值最大值)不变,程序运行错误

Mat tmp;
tmp.create(3, 3, CV_64FC1);
问题二 使用zeros方法不正确

zeros方法使用方式如下,错误的方法将导致运行出错

Mat tmp;
// 错误的方法
tmp.zeros(3, 3, CV_64FC1); // 会运行出错
// 正确的方法
tmp = cv::Mat::zeros(3, 3, CV_64FC1);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值