在编码过程中已经编好的代码,使用存放数据类型是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 )