“
在前面我们了解到opencv中的图像实际上就是一个ndarray数组,我们对ndarray数组进行操作就是对图像进行操作。我们先来看一下切片查找,这是我们非常常用的一个操作。
(1)一维数组的切片
我们来看看切片的语法,对于一维的数组我们可以通过下面的操作获取第0个到第4个元素:
array[0:5]
从上面可以知道我们的切片操作是左闭右开的。上面的切片操作我们可以简写一下:
array[:5]
如果我们没有设置第一个值,则表示从头开始切片。当然我们还可以省略第二个值,这时含义就是取到最后一个元素,比如下面的操作:
array[3:]
我们用一个实际的例子来看看切片操作:
import numpy as np
创建一个一维的ndarray数组,数据为[0, 1, 2, 3, 4, 5, 6, 7]
array = np.array([0, 1, 2, 3, 4, 5, 6, 7])
取0到4个元素
print(array[0:5])
print(array[:5])
取第3个到最后一个元素
print(array[3:])
输出内容如下:
[0 1 2 3 4]
[0 1 2 3 4]
[3 4 5 6 7]`
我们可以把切片操作总结为:
左闭右开
array[start: end-1]
当我们以第0个开始,获取以最后一个结尾的话,对应的值是可以省略的。
(2)二维数组的切片
在图像处理中,我们更关注二维数组的切片。它的语法和一维数组很相似。为了方便理解,我们直接使用图片来进行切片,比如下面这张图片:
null
二维数组切片的语法如下:
array[start:end-1, start:end-1]
现在我们需要明确一点,左边部分是对高的截取,右边部分是对宽的截取。那现在我要截取图片的左半部分的操作应该如下:
import cv2
读取图片
img = cv2.imread('xyql.jpg')
获取图片的宽,并除2
width = img.shape[1]//2
对图片进行切片,截取左半部分
left = img[:, :width]
显示图像三步骤
cv2.imshow('left', left)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中切片的代码是:
left = img[:, :width]
左边的是截取高,我们需要全部截取,因此两个值都可以省略。右边我们只需要截取左半部分,因此左边的值可以省略,右边的值则是我们前面计算到的宽度。下面是效果图:
(2)np.zeros
np.zeros和ones没有上面区别,只是它元素的内容是0。我们来简单看一下:
import numpy as np
img = np.zeros((5, 5), dtype=np.uint8)
print(img)
为了方便看,我们直接生成一个简单的数组,输出结果如下:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
其它的都不再细说了。