当强制转换时,Python/Opencv Float转换为不正确的Int

2024-10-03 06:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用OpenCV+Python在一些视频上自动添加一个覆盖图像。在大多数情况下,我的代码运行得很好,除了从给定的输入视频中收集一些启发。我使用OpenCVVideoCapture.Get()函数收集视频的帧数和FPS,然后分别存储到变量中。得到的数值是float值,我将其转换为int,但问题在于:这些值会下降一个!在

完整的代码片段如下:

import cv2 as cv

inputnm = "testVideo.mp4"

# Load the video into memory
camera = cv.VideoCapture(inputnm)

# Get important heuristics
fps = camera.get(cv.CAP_PROP_FPS)
maxFrames = camera.get(cv.CAP_PROP_FRAME_COUNT)

print type(fps), type(maxFrames)
print fps,maxFrames
print int(fps), int(maxFrames)
quit()

这将产生输出:

^{pr2}$

有人能解释一下为什么吗?我尝试过将其转换为numpy.float128,然后再转换为numpy.unit8,但它仍然将值降低一。奇怪。在


Tags: numpyget视频typecvcameraintcap
2条回答

您刚刚看到了浮点的奇妙之处。在

Python将数字显示为从浮点开始的对话的接近精度,这对于可视化来说通常足够精确,在许多情况下也适用于计算,但是在像您这样的情况下,精度根本不够。在

使用round(maxFrames)。在

基本上,你的浮点变量显示为60,但实际上它可能是59,还有一些变化。它不会显示为59,因为python足够聪明,可以为了我们的缘故进行汇总(59.99999。。=60)。当您强制转换为int时,您将截断59的小数位数,这似乎会使值下降1(59.9999=>;59)。在

编辑:和其他用户建议的一样,round(maxFrames)将把值四舍五入到最接近的整数。然后可以转换为int并得到正确的结果。在

相关问题 更多 >