剪辑和类型转换 RGB 图像的更快方法
Posted
技术标签:
【中文标题】剪辑和类型转换 RGB 图像的更快方法【英文标题】:Faster way to Clip and Typecast RGB images 【发布时间】:2020-08-08 00:11:27 【问题描述】:我正在尝试以 30 FPS 的速度处理视频,这给了我 33 毫秒来处理每一帧,我已经在图像处理中使用了大约 20 毫秒,但我最大的瓶颈是转换。
帧是两个 RGB 图像,形状 = (540, 1787, 3),dtype = float32,我需要将图像从 0 剪辑到 255 并将其转换为 dtype uint8。
目前我正在使用此代码进行转换:
self.imgFrame = self.imgConcat.clip(min = 0, max = 255).astype(np.uint8)
self.imgMotio = self.imgDiff.clip(min = 0, max = 255).astype(np.uint8)
这两行加起来大约 90 毫秒。 只需使用 astype(np.uint8) 进行强制转换就会产生溢出值并且只是噪音 我已经按照这里的建议尝试了 numba:https://jcristharif.com/numba-overload.html 但没有让它工作也没有修改它 我很高兴将 FPS 降低到 20 甚至 15,但剪辑不会让我超过 10
我正在考虑为剪辑而启动一个线程,但我几乎可以肯定它不会有帮助
有什么建议或方法可以将其修剪为 (0, 255)?
【问题讨论】:
如果需要实时性能,为什么要使用 Python? 【参考方案1】:好的,我已经使用 np.uint8 制作了所有内容。
在处理减法时,我首先将图像从 np.uint8 转换为 np.int16
现在,由于某种原因,np.clip(min = 0, max = 255).astype(np.uint8) 更快
这两行代码现在执行大约需要 10 毫秒而不是 90 毫秒
【讨论】:
以上是关于剪辑和类型转换 RGB 图像的更快方法的主要内容,如果未能解决你的问题,请参考以下文章
图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)