opencv中的灰度图以uint8存储,3通道彩色图也是uint8,范围就是0~255
为什么要这样?
首先,像素值一般就是0到255,然后如果是int型,int一般是32位的,相当于浪费了接近24位,这样存储肯定是节约内存的
然后你用int()对uint8,uint16进行强制类型转换,实际上是不会损失的,因为你一个32位的对低位的进行类型转换肯定是不会损失的,只有高位转低位才会损失
1.image.at中uchar对应uint8,short对应uint16
2.做了一个实验,stixelImg.at<uchar>(1,1) = 255,在1,1这个位置,stixelImg会将原本是int型的255转换成uint8型,即uchar
3.如果在1,1那个位置存储的是uchar的类型,用这个代码去读这个像素值:stixelImg.at<float>(1,1),读出来是一个错误的值,读出来是0,并且计算前面加了一个float()函数进行类型转换,也依旧是0
4.
用这个代码存储图片:
#include <opencv2/opencv.hpp> #include <string> using namespace std; using namespace<