剪辑和类型转换 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)

OpenCV图像处理应用(面向Python)之色彩空间转换类型

怎么用ABBYY将PDF转换为JPEG图像

C: 将数组转换为 RGB 图像

YUV与RGB 以及之间的转换