【Python基礎】Array對象的切片操作

矩陣運算是圖像處理最基礎的操作之一,Python中提供了非常方便的Array對象,也就是多維數組,可以讓我們便捷地定義矩陣。下面,是我在學習過程中整理的關於np.array對象的切片操作方法,讓我們一起看看a[:,0]、a[:,1]、a[:,:,0]、a[:,:,1]、a[:,m:n]和a[:,:,m:n]都代表着什麼,希望可以對大家有點幫助~撒花


一維數組的切片操作

一維數組的切片操作和列表基本類似,我們先看結果吧:

import numpy as np
a=np.arange(24)
print("一維數組a:",a)
print("a[:]:",a[:])
print("a[4:8]:",a[4:8])
print("a[4:]:",a[4:])
print("a[:8]:",a[:8])

總結一下,對於一維數組a:

  • a[:]  a中的全部元素;

  • a[m:n]  a中從m下標到n-1下標的全部元素(下標從0開始,左閉右開的區間);

  • a[m:]  a中從m下標到結束的全部元素;

  • a[:m]  a中從0開始到n-1下標的全部元素(不包含下標爲m的元素)。

二維數組的切片操作

代碼比較簡單就不放了,直接看結果吧:

對照着結果總結一下,對於二維數組a:

  • a[m,n]  a中第m行第n列的數據,下標均從0開始;

  • a[:]  a中的全部元素;

  • a[:,0]  a中第0列的全部元素組成的數組;

  • a[:,1]  a中第1列的全部元素組成的數組;

  • a[m,:]  a中第m行的全部元素組成的數組。

三維(n維)數組的切片操作

照例,看結果找規律:

擴展到更高維,可以得到,對於n維數組a:

  • a[m,n]  a中第m行第n列的數據,下標均從0開始;

  • a[:]  a中的全部元素;

  • a[:,n]  a中第n列的全部元素組成的數組;

  • a[d:e,n]  a中第d行至第e-1行(左閉右開)的第n列的全部元素組成的數組;

  • a[m,d:e]  a中第m行第d列至第e-1列(左閉右開)全部元素組成的數組。


np.array切片操作在圖像處理中的實例:利用Sobel算子計算圖片梯度

用一個非常簡陋的圖(在白底上畫一個黑色的圓)來做一下梯度處理,代碼如下:

import cv2
import numpy as np

img = cv2.imread('circle.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用Sobel計算像素點x,y方向的梯度
h, w = img.shape[:2]  # 提取圖片寬、高
grad = np.zeros((h, w, 2), dtype=np.float32)  # 創建梯度矩陣
grad[:, :, 0] = cv2.Sobel(img, cv2.CV_16S, 1, 0, ksize=3)  # 取x方向的梯度
grad[:, :, 1] = cv2.Sobel(img, cv2.CV_16S, 0, 1, ksize=3)  # 取y方向的梯度

cv2.imshow('grad_x', grad[:, :, 0])
cv2.imshow('grad_y', grad[:, :, 1])
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章