如何在不使用 cv2.warpAffine() 的情况下翻译图像?[Python 3 和 OpenCV 4.1]

cad*_*nd9 5 python opencv image image-processing

我试图通过切断左侧的 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))
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 5

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

import cv2
import numpy as np

# Define your image somewhere...
# ...
# ...

img2 = np.zeros_like(img)
img2[:,:-100] = img[:,100:]
Run Code Online (Sandbox Code Playgroud)

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