【问题标题】:How to translate an image without using cv2.warpAffine()? [Python 3 and OpenCV 4.1]如何在不使用 cv2.warpAffine() 的情况下翻译图像? [Python 3 和 OpenCV 4.1]
【发布时间】:2020-06-29 17:41:06
【问题描述】:

我正在尝试通过切断左侧的 100 像素并在右侧添加 100 像素的黑色像素来将图像(来自视频捕获)向左平移 100 像素,以使图像保持相同的大小。我知道这可以通过 cv2.warpAffine() 和转换矩阵来完成,但是对每一帧都这样做会增加大量的延迟。我已经读到可能有一种方法可以使用 cv2.copyTo() 来做到这一点,但我仍然不确定如何做到这一点,无论是使用 copyTo 还是其他方法。谢谢!

这是在 Python 3 和 OpenCV 4.1 中完成的

当前(慢)方法:

translation_matrix = np.float32([[1, 0, x_shift], [0, 1, y_shift]])
img = cv2.warpAffine(img, translation_matrix, (w, h))

【问题讨论】:

    标签: python image opencv image-processing


    【解决方案1】:

    创建一个与旧图像大小相同的新图像,但对旧图像进行索引,以便您开始按列索引 100 像素。之后,确保分配这些像素,以便我们从新图像的第一列开始,但一直到最后一列。

    import cv2
    import numpy as np
    
    # Define your image somewhere...
    # ...
    # ...
    
    img2 = np.zeros_like(img)
    img2[:,:-100] = img[:,100:]
    

    以上代码创建了一个名为img2 的新图像,该图像被初始化为与原始输入图像img 大小相同的全零。之后,我们从原始图像的第 100 列开始复制像素到末尾,然后将其分配给目标图像中从第一列到最后 100 列的所有列。之后的其余列仍将全为零,这实际上是给你黑色像素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多