我在测试 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();
输出:
它们应该是一样的。对吧??!!
最佳答案
在第二个例子中,你应该将数组声明为
double objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};
你可以将CV_xxtCn
读作
- xx: 位数
- t:类型(F=浮点型,S=有符号整数,U=无符号整数)
- n: channel 数
关于debugging - OpenCV 中 CV_32FC3 和 CV_64FC3 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191211/