我已经读过有符号字符和无符号字符类型不能保证在每个平台上都是 8 位,但有时它们有超过 8 位。
如果是这样,使用 OpenCv 我们如何确定 CV_8U 始终是 8bit?
我编写了一个简短的函数,它需要一个 8 位 Mat 并且碰巧将 CV_8SC1 Mat 元素转换为 uchars 并将 CV_8UC1 转换为 schar。
现在恐怕它不是独立于平台的,我应该以某种方式修复代码(但不知道如何)。
P.S.:同样,CV_32S 怎么总是 int,在没有 32 位整数的机器上也是如此?
最佳答案
你能提供一个引用(我从未听说过)吗?可能您的意思是可以在 cv::Mat 中的一行末尾添加的填充。这没问题,因为通常不使用填充,特别是如果您使用接口(interface)函数,例如迭代器(c.f.)。如果您发布一些代码,我们可以看到您的实现是否确实存在此类问题。
// template methods for iteration over matrix elements.
// the iterators take care of skipping gaps in the end of rows (if any)
template<typename _Tp> MatIterator_<_Tp> begin();
template<typename _Tp> MatIterator_<_Tp> end();
CV_32S
将始终为 32 位整数,因为它们使用 inttypes.h
中定义的类型(例如 int32_t
, uint32_t
)而不是特定于平台的 int
, long
, 任何。
https://stackoverflow.com/questions/7609837/