opencv中Mat的数据类型设置问题

本文探讨了在使用OpenCV进行矩阵运算时遇到的问题及解决方案。指出使用Mat类型默认为图像的uchar类型(0~255),在矩阵计算过程中会超出范围导致错误。通过将数据类型更改为CV_32FC1(float类型),有效解决了这一问题。

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

在编码过程中已经编好的代码,使用存放数据类型是Mat,觉得一直没有问题,但是出来的结果就是不对。

所以考虑改用vector或者CvMat类型。

考虑到要使用opencv中有关数据计算的函数,比如乘,求逆,转置等,最终选择用CvMat。

在使用CvMat中,要实现使用cvCreatMat函数,需要设置数据类型,设置为CV_32FC1。

这时意识到可能Mat中的数据类型设置有误。

于是乎,讲Mat变量的类型设置为CV_32FC1,使用float类型。

开始设置默认为图像的uchar类型,而数据范围为0~255,在矩阵计算过程中,肯定是要超出这个范围的,所以计算过程中就出现了错误。

以下是数据类型介绍:

Mat_<uchar>对应的是CV_8U,

Mat_<char>对应的是CV_8S,

Mat_<int>对应的是CV_32S,

Mat_<float>对应的是CV_32F,

Mat_<double>对应的是CV_64F,

对应的数据深度如下:

• CV_8U - 8-bit unsigned integers ( 0..255 )

• CV_8S - 8-bit signed integers ( -128..127 )

• CV_16U - 16-bit unsigned integers ( 0..65535 )

• CV_16S - 16-bit signed integers ( -32768..32767 )

• CV_32S - 32-bit signed integers ( -2147483648..2147483647 )

• CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )

• CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值