【发布时间】:2018-08-02 17:47:21
【问题描述】:
我正在使用 Python 中的 OpenCV 开发视觉算法。它的组成部分之一需要比较颜色空间中的点,其中 x 和 y 分量不是整数。我们的点列表存储为 dtype = float64 的 ndarray,我们的数字范围从 -10 到 10。
我们算法的一部分涉及在这个空间中的一些点上运行一个凸包,但是cv2.convexHull() 需要一个 dtype = int 的 ndarray。
鉴于我们要比较的值范围很窄,简单的截断会导致我们丢失大约 60 位信息。有没有办法让 numpy 直接将 float 数组解释为 int 数组?由于比例没有意义,我希望考虑所有 64 位。
是否有任何已定义的方法可以在 numpy 浮点数中将指数与尾数分开,而不对每个元素进行按位提取?
【问题讨论】:
-
把你的float数组乘以1000,传入,输出除以1000?因此,如果您的号码是 12.123,请将 12123 作为整数传入。
-
仅供参考:
scipy.spatial.ConvexHull接受浮点数组。 -
浮点有 53 位有效位,而不是 64 - 其他位用于指数和符号。
-
P.S.我可以理解为什么 -10 到 10 的范围不够精确,但是对于色彩工作,你真的不需要那么高的精确度。乘以 100 可能会起作用。
-
另一个仅供参考:“我希望考虑所有 64 位。” 通过谷歌搜索(我不是 OpenCV 专家),它看起来像最大的可用于 OpenCV 数组的整数类型是 32 位有符号的,因此尝试在所有 64(或 53)位中维护信息是没有意义的。