访问OpenCV Mat CV_16UC1的元素

5
我尝试了以下代码行:
image.at<char>(row, column);
image.at<uchar>(row, column);
image.at<unsigned char>(row, column);
image.at<double>(row, column);

有什么问题吗?

之后,我需要将这个值转换成浮点数。进行强制类型转换就可以了吗?


告诉我们你得到了什么结果,与你期望的结果有何不同。它是否无法编译? - Nathan Monteleone
我没有编译错误。它崩溃了,显示给我看:在RobotClient.DebugVC10.exe中0x773c2eec处第一次机会异常:Microsoft C++异常:cv::Exception位于内存位置0x0078d11c。 - user3441653
1个回答

9

CV_16UC1的底层类型是无符号短整型,因此您可能需要

unsigned short val = image.at<unsigned short>(row, column);

是的,之后你可以将其静态转换为浮点数:

float fval = static_cast<float>(val);

嗨,现在它可以工作了。但是只有在我使用断点运行代码时才能正常工作,如果不使用它们,程序就会崩溃。可能是因为图像在一个for循环中的image.at函数。 - user3441653
你可能在这一点上遇到了不同的问题,很可能是某种时间错误。 - Nathan Monteleone
嗨!我解决了另一个问题,现在可以专注于我需要的转换!没有构建错误,但是转换始终为零。我确定cv :: Mat图像与零不同,因为我使用OpenGL库绘制它。问题可能是什么? - user3441653
@maury88ct 我会发布一个新问题,解释新的问题以及你在OpenGL中所做的工作,以验证矩阵是否合理。 - Nathan Monteleone
我更喜欢包含 stdint.h 并使用 uint16_t 来明确表示。 - wcochran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接