首页 > 解决方案 > 使用 numpy 增强图像 Python cv2 的数组操作

问题描述

给定 X 是一个 Numpy 数组 X.shape =(1, 96, 96, 3),基本上是从 CV2 读取的图像。我正在寻找增强操作的更简单的表达方式。

您能否解释一下以下代码行的作用

b=X[:, ::-1, :, :]
c=X[:, ::-1, ::-1, :]
d=X[:, :, ::-1, :]

标签: pythonarraysnumpyopencvcv2

解决方案


X[::-1]索引适用:索引X从第一个到最后一个,步长为-1.

  • b=X[:, ::-1, :, :]- 向上/向下反转图像。
  • c=X[:, ::-1, ::-1, :]- 反转图像上/下和左/右。
  • d=X[:, :, ::-1, :]- 左/右反转图像。

备注:
::不是算子,实际上是两个:算子一个接一个。
X[::-1]是一样的X[ : : -1]
请参阅索引文档。

基本切片语法是 i:j:k 其中 i 是起始索引,j 是停止索引,k 是步长。

如果没有给出 i,则默认为 0

如果没有给出 j,则默认为 n

写作[: : -1],省略iand j,并设置k-1
语法的意思是:“从 index0中取出所有元素,使用 step -1”,它以相反的顺序给出所有元素(沿着这个轴的所有元素)。


例子:

import cv2
import numpy as np

# Build input:
im = cv2.imread('chelsea.png')
im = cv2.resize(im, (96, 96))
X = np.empty((1, im.shape[0], im.shape[1], im.shape[2])).astype(np.uint8)
X[0, :, :, :] = im

b = X[:, ::-1, :, :]
c = X[:, ::-1, ::-1, :]
d = X[:, :, ::-1, :]

结果:

我是:
在此处输入图像描述

乙:
在此处输入图像描述

C:
在此处输入图像描述

d:
在此处输入图像描述


注意:
我有点忽略了第一个索引,因为维度是1.
在多帧的情况下,第一个索引通常应用帧数。


推荐阅读