gpt4 book ai didi

c - 如何确定 CvMat 的数据类型

转载 作者:太空狗 更新时间:2023-10-29 15:15:14 26 4
gpt4 key购买 nike

使用 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

EDIT 重现此内容的最小应用程序...

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 type = 1111638021 and CV_32FC1 = 5 and 0

最佳答案

type 是一个变量,不是函数:

CvMat* tmp_ptr = cvCreateMat(t_height,t_width,CV_8U);
std::cout << "type = " << tmp_ptr->type << std::endl;

编辑:

关于正在打印的type值异常,according to this answer ,这个变量存储的不止是数据类型。

因此,检查 cvMat 数据类型的适当方法是使用宏 CV_MAT_TYPE():

CvMat *tmp2 = cvCreateMat(3,1, CV_32FC1);
std::cout << "tmp2 type = " << tmp2->type << " and CV_32FC1 = " << CV_32FC1 << " and " << (CV_MAT_TYPE(tmp2->type) == CV_32FC1) << std::endl;

数据类型的命名规则是:

CV_<bit_depth>(S|U|F)C<number_of_channels>

S = Signed integer
U = Unsigned integer
F = Float

E.g.: CV_8UC1 means an 8-bit unsigned single-channel matrix,
CV_32FC2 means a 32-bit float matrix with two channels.

关于c - 如何确定 CvMat 的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com