在OpenCV中,像素值的上下限和类型是什么?

6

OpenCV中像素值的上下限是多少,我该如何获取它们?

我所能想到的唯一限制是CV_8U类型Mat,其中通道像素值的下限为0,上限为255。其他Mat的这些值是什么?

比如CV_32F、CV_32S?

2个回答

25

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

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

查看此教程以获取数据类型范围。


1
谢谢!这应该放在OpenCV文档的首页。 - Mirror318
如果cv::Mat有一个查询此信息的函数,那就太好了。 - Tim MB
在cv命名空间中是否定义了这些最大值的常量? - leinaD_natipaC
等等,但这不是有保障的,是吗?因为C++标准没有指定整型的位数。所以CV_32S可能是int32_t而不是int,或者位数可能会(虽然不太可能)变化。但是没有叫double64_t的类型 - 所以我猜你对类型的映射是正确的,而极限值可能是错误的。在我看来,OpenCV的命名惯例在这里相当令人困惑。 - Martin R.

1

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


我已经完成了这一部分。但是 OpenCV 是否使用整个范围呢?也就是说,对于 CV_32FC1,numeric_limits<float> ::max() 将是白色,而 numeric_limits<float> ::min() 将是黑色吗? - Barney Szabolcs
3
对于CV_32F,0.0表示黑色,1.0表示白色。 - sgarizvi

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