cvTranspose提供不同的图像大小?

Lou*_*uis 3 c opencv

我是OpenCV的新手,我想转置灰度图像,但输出的大小错误.

// img is an unsigned char image
IplImage *img = cvLoadImage("image.jpg"); // where image is of width=668 height=493
int width  = img->width;
int height = img->height;
Run Code Online (Sandbox Code Playgroud)

我想转置它:

IplImage *imgT = cvCreateImage(cvSize(height,width),img->depth,img->nChannels);

cvTranspose(img,imgT);
Run Code Online (Sandbox Code Playgroud)

当我检查图像时,我看到原始图像img的大小为329324,这是正确的:493*668* 1字节,因为它是一个unsigned char.但是imgT尺寸是331328.

我不确定这是怎么回事.

编辑:1-我正在使用Windows XP和OpenCV 2.2.2-当我检查图像时,我的意思是当我看到变量imgT的值.例如imgT-> width,imgT-> heigt,imgT-> size等.

Chr*_*ica 11

这是因为OpenCV以4字节边界对齐图像行.在第一个图像中,一行是668字节宽,可以分为4,因此您的图像元素是连续的.

第二个图像的宽度为493(由于转置),不能被4分割.下一个可被4分割的较高数字是496,所以你的行实际上是496字节宽,每个末尾有3个未使用的字节行,以4字节边界对齐行.实际上496*668确实是331328.所以你应该始终意识到这样一个事实,即你的图像元素不需要是连续的(至少它们应该在一行内是连续的).