cvTranspose提供不同的图像大小?

时间:2011-06-15 18:53:19

标签: 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;

我想转置它:

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

cvTranspose(img,imgT);

当我检查图像时,我发现原始图像img的大小为329324,这是正确的:493*668* 1字节,因为它是unsigned char。但是imgT的大小为331328。

我不确定这是怎么发生的。

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

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:-1)

您可以将图像存储在cv:Mat()中,并使用Mat.t()进行转置。行和列将自动分配/取消分配,因此您不必担心大小