【问题标题】:Fast image processing with Look-up table使用查找表进行快速图像处理
【发布时间】:2019-12-05 19:44:30
【问题描述】:

我有来自视频的图像和带有索引的查找表。目标是通过使用查找表中的索引从每一帧生成一个新图像。我的代码使用我的笔记本电脑工作,但有点慢。我的目标是让它在 TX2 中工作。下面是我的代码,不知道为什么它很慢。

    cap1 = cv2.VideoCapture(2)
    with open('lookup_table.pkl', 'rb') as f:
        lut_idx = pickle.load(f)
    channels = 3 # Colored images
    dim = 480 # Square image 480 x480
    while (cap1.isOpened()):
        ret1, left = cap1.read()
        if ret1 == True:
            newImg = np.reshape(np.reshape(together, (dim * dim , channels))[lut_idx],
                                     (dim, dim, channels))  
            cv2.imshow('newImage', newImg)  # Show image

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap1.release()
    cv2.destroyAllWindows()

我可以做些什么来让它更快?我应该研究并行处理吗? 欢迎任何帮助。 谢谢

【问题讨论】:

  • 首先您应该进行基准测试,看看是什么花费了时间。运行您的视频阅读代码,无需处理并计时。然后在不读取视频的情况下在静态帧上运行您的处理。然后,您将更好地了解您的最大可能速度是多少以及您应该优化什么。
  • 我使用 python profiler 来确定哪个进程花费的时间最多。似乎读取图像数据和泡菜表是最大的一个。但是有没有办法让索引部分更快?。
  • 请问获取图片和查找的时间是几点?
  • 您到底想达到什么目标?用 lut_idx 置换像素?能否提供一些带有示例输入和预期输出的屏幕截图?
  • 所以我有两个具有 235 度 FOV 的鱼眼相机输入。我正在尝试去扭曲它。在浪费了好几个月之后,我找到了一个大师的作品,他们使用数学函数来变形。它可以很好地完成工作。唯一的问题是它是用来扭曲图像而不是视频。所以有很多for循环。所以我决定做一个for循环和一个索引查找表。现在我可以实时去扭曲,唯一的问题是它对于两个鱼眼相机和 TX2 来说不够快。我需要视频源来驱动我的机器人。

标签: numpy array-indexing


【解决方案1】:

所以,我正在使用预定义的查找表进行一些图像处理。该表具有从图像中抓取像素的位置的索引值。在 TX2 中执行此操作很困难,因为 TX2 的 CPU 较弱。更快的方法是使用 GPU,因为 TX2 有一个巨大的 GPU。可以使用 CUPY 或 Numba 来解决速度问题。

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2013-03-11
    • 2023-04-04
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多