Buffer指的是unsigned char* 类型的图片内容(像素值),将Buffer转为openCV的格式,便于查看和保存,用来进行中间步骤的观察和调试。
1.opencv 1.0版本
uchar* 数据指针转为 IplImage类型
Buffer 为uchar* 类型,height ,width提前知道。
彩图的size用width 和 height,但是在cvSetData里面要使用跨度stride。
所谓跨度,在opencv里面用step表示,指得是图像一行真实的存储单元,按理说对灰度图而言,每个像素就是一个存储单元,跨度就等于宽度。对彩色图像而言,一个像素对应RGB三个值,有三个存储单元,因此跨度是宽度的三倍,但事实上很多图像格式为了读取的需要,往往跨度是8的倍数,就在宽度的三倍基础上再补齐到8的倍数。
计算公式如下:
u16stride = (u16Width * 24 + 31)/32 * 4;
注意,在opencv中,跨度似乎是16的倍数,未验证,说明在遇到跨度问题时,要注意对于跨度的具体定义。
IplImage* src = cvCreateImage(cvSize(Width,Height), IPL_DEPTH_8U, 3);
cvSetData(src ,Buffer,Stride);
cvShowImage("Buffer",src );
2. opencv 2 以上版本
Mat结构体
新版本转换如下
cv::Mat src(Height, Width, CV_8UC3 ,Buffer,stride);
imshow("Buffer",src);