3

我正在使用 OpenCV 矩阵和显示功能进行测试,并遇到了这个错误。我花了半天多的时间才揭晓:

我最初尝试显示 OpenCV 矩阵,而不考虑矩阵的类型,例如 CvMat 或 Mat,......使用 vasile 先生从我的另一篇文章Multi channel Mat display function推荐的显示方法

display 方法只是将矩阵的所有数据获取到 cout 流

这是我的程序:

// First: CV_32FC3 works OK

float objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};
CvMat objptsmat = cvMat( 1, 4, CV_32FC3, objpts);  
CvMat* objectPoints = &objptsmat;
CvMatShow(objectPoints);
getchar();

输出:

在此处输入图像描述

// Second: CV_64FC3 crashes

float objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};
CvMat objptsmat = cvMat( 1, 4, CV_64FC3, objpts);  
CvMat* objectPoints = &objptsmat;
CvMatShow(objectPoints);
getchar();

输出: 在此处输入图像描述

他们应该是一样的。对??!!

4

1 回答 1

6

在第二个示例中,您应该将数组声明为

double objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};

你可以读CV_xxtCn

  • xx:位数
  • t:类型(F = 浮点类型,S = 有符号整数,U = 无符号整数)
  • n:通道数
于 2012-08-30T06:45:09.077 回答