当使用CvMat
类型时,数据类型对于程序的运行至关重要。
例如,根据您的数据是float
类型还是unsigned char
类型,您将选择以下两个命令之一:
cvmGet(mat, row, col);
cvGetReal2D(mat, row, col);
有没有通用的方法来解决这个问题?如果将错误类型的矩阵传递给这些调用,它们会在运行时崩溃。这正在成为一个问题,因为我定义的函数被传递了几种不同类型的矩阵。
如何确定矩阵的数据类型,以便您始终可以访问其数据?
我尝试使用 "type()" 函数进行操作。
CvMat* tmp_ptr = cvCreateMat(t_height,t_width,CV_8U);
std::cout << "type = " << tmp_ptr->type() << std::endl;
这段代码不能编译,提示错误信息为"term does not evaluate to a function taking 0 arguments"
。如果我删除type
单词后面的括号,它会返回一个1111638032类型的结果。
编辑生成该问题最小化应用程序的代码如下...
int main( int argc, char** argv )
{
CvMat *tmp2 = cvCreateMat(10,10, CV_32FC1);
std::cout << "tmp2 type = " << tmp2->type << " and CV_32FC1 = " << CV_32FC1 << " and " << (tmp2->type == CV_32FC1) << std::endl;
}
输出:tmp2类型为1111638021,CV_32FC1 = 5且为0
CV_8UC1
创建矩阵会怎样?您尝试创建的矩阵的大小是多少(宽度/高度)?您没有测试cvCreateMat()
的成功,这可能是一个好主意。 - karlphillip