【问题标题】:What are the upper and lower limits and types of pixel values in OpenCV?OpenCV中像素值的上下限和类型是什么?
【发布时间】:2012-11-21 00:22:34
【问题描述】:

OpenCV中像素值的上限和下限是多少,如何获取?

我能算出的唯一限制是CV_8U 类型的 Mat,通道中像素值的下限是 0,上限是 255。其他 Mat 的这些值是多少?

说 CV_32F、CV_32S?

【问题讨论】:

    标签: opencv


    【解决方案1】:

    OpenCV 等效 C/C++ 数据类型:

    CV_8U -> unsigned char(最小值 = 0,最大值 = 255)

    CV_8S -> char(最小值 = -128,最大值 = 127)

    CV_16U -> unsigned short(最小值 = 0,最大值 = 65535)

    CV_16S -> short(最小值 = -32768,最大值 = 32767)

    CV_32S -> int(最小值 = -2147483648,最大值 = 2147483647)

    CV_32F -> float

    CV_64F -> double

    检查this tutorial 的数据类型范围。

    需要考虑的一点是,当使用imshowcvShowImage 显示CV_32FCV_64F 类型的图像时,OpenCV 期望值在0.0 和1.0 之间进行标准化。否则,它会使像素值饱和。

    【讨论】:

    • 谢谢!我会测试所有这些。
    • 谢谢!这应该在 OpenCV 文档的首页
    • 如果 cv::Mat 有查询这些信息的功能就好了
    • 在 cv 命名空间中是否为这些最大值定义了任何常量?
    • 等等,但这不能保证,是吗?因为 C++ 标准没有指定整数类型的位大小。因此,CV_32S 要么是 int32_t 而不是 int,要么位大小可能(即使不太可能)有所不同。但是没有像 double64_t 这样的类型 - 所以我猜你对类型的映射是正确的,而限制 可能 是错误的。恕我直言,OpenCV 的命名约定在这里相当混乱。
    【解决方案2】:

    CV_32F 表示 32 位浮点数。 CV_32S 表示 32 位有符号整数。我相信你可以猜到 CV_64F 代表什么。互联网上有很多关于不同数据类型可以采用的范围的参考资料,例如here 是 32S。

    【讨论】:

    • 我已经做到了。但是 OpenCV 是否使用整个范围?对于 CV_32FC1,表示 numeric_limits::max() 将是白色,而 numeric_limits::min() 将是黑色?
    • 对于 CV_32F,0.0 为黑色,1.0 为白色。
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多