cvConvertScale没有按预期工作?

时间:2010-02-16 15:43:02

标签: opencv

我正在运行下面的简单代码,并期望o的深度变为32。 但它仍然是8.我错过了什么?

  IplImage *o = cvCreateImage(cvSize(100,100), 8,1);
  IplImage *n = cvCreateImage(cvSize(100,100), 32,1);

  cvConvertScale(o,n,1.0,0.0);

  printf("The depth of o is %d\n", o->depth);
  printf("The depth of n is %d\n", n->depth); 

2 个答案:

答案 0 :(得分:1)

好吧,行为正确。 源映像中的数据类型不会转换为目标的数据类型。

只是将源与缩放常数相乘并转换为目标类型,并将结果存储在目标中。

因此,源或目标的类型没有变化。 只有目标中的数据才会更改为1.0

以外的缩放常量

答案 1 :(得分:1)

更有意义的是:

  IplImage *in8u = cvLoadImage( filename, 1); // always uint8, and in this case 3 channel
  IplImage *in32f = cvCreateImage(cvSize(100,100), IPL_DEPTH_32F ,3); // whatever you choose

  cvConvertScale(in8u,in32f,1.0,0.0);

  printf("The depth of in8u is %d\n", in8u->depth);
  printf("The depth of in32f is %d\n", in32f->depth); 

现在您将8位输入文件的数据作为32位浮点数据