gpt4 book ai didi

c++ - opencv 中 .at 和 static_cast 的区别?

转载 作者:行者123 更新时间:2023-11-28 00:13:30 33 4
gpt4 key购买 nike

我有一个浮点矩阵 a,我想访问点 (x,y) 处的元素,但我想将数据类型转换为 unsigned char。 point(x,y)中的 float 为652.759

我要使用的代码(基于Opencv)是

    a.at<uchar>(Point(x,y))

以上代码的结果是68。

但是当我用简单的c++代码检查结果时

    static_cast<unsigned char>(a.at<float>(Point(x,y)))

结果是 140。

谁知道为什么?我怎样才能使用上面的两种代码获得相同的结果?

谢谢!

最佳答案

at()函数不知道每个点的位数,并根据提供的模板类型进行判断。

所以,at<float>(2)将返回一个由从数组的第 4 个字节开始的 32 位范围组成的 float ,而 at<uchar>(2)将简单地返回数组中的第二个字节。

例如下面的

Mat m(10, 1, CV_8U);

m.at<uchar>(0) = 44;
m.at<uchar>(1) = 1;
m.at<uchar>(2) = 0;
m.at<uchar>(3) = 0;

cout << "char 0 : " << (int)m.at<uchar>(0) << endl;
cout << "char 1 : " << (int)m.at<uchar>(1) << endl;
cout << "short 0 : " << (int)m.at<unsigned short>(0) << endl;

产生

char 0  : 44
char 1 : 1
short 0 : 300

short 0 = char 1 * 256 + char 0

关于c++ - opencv 中 .at<uchar> 和 static_cast<uchar> 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844305/

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