「
opencvの画像が実際にはndarray配列であることを知る前に、ndarray配列を操作して画像を操作します。まず、私たちが使用する非常に一般的な操作であるスライス検索を見てみましょう。
(1)1次元配列
のスライススライスの構文を見てみましょう。1次元配列の場合、次の操作で0番目から4番目の要素を取得できます。
array [0:5]
上記から、スライス操作が左に閉じて右に開いていることがわかります。上記のスライス操作は省略できます。
array [:5]
最初の値を設定しない場合は、最初からスライスすることを意味します。もちろん、次の操作のように、最後の要素を取得することを意味する2番目の値を省略することもできます。
array [3:]
実際の例を使用して、スライス操作を見てみましょう。
numpyをnpとしてインポート
データ[0、1、2、3、4、5、6、7]を使用して1次元のndarray配列を作成します
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)2次元配列
のスライス画像処理では、2次元配列のスライスに重点を置いています。その構文は、1次元配列と非常によく似ています。理解を容易にするために、次の画像のように、画像を直接使用してスライスします。
ヌル
2次元配列をスライスするための構文は次のとおりです。
array[start:end-1, start:end-1]
ここで明確にする必要があります。左側の部分は高さの切片であり、右側の部分は幅の切片です。だから今、私は次のように写真の左半分をキャプチャしたいと思います:
import cv2
写真を読む
img = cv2.imread('xyql.jpg')
画像の幅を取得し、2で割ります
width = img.shape[1]//2
写真をスライスして左半分を撮ります
left = img[:, :width]
画像を表示する3つのステップ
cv2.imshow('left', left)
cv2.waitKey(0)
cv2.destroyAllWindows()
スライスのコードは次のとおりです。
left = img[:, :width]
左側は切片の高さです。すべてを切片にする必要があるため、両方の値を省略できます。右側では、左半分をインターセプトするだけでよいので、左側の値は省略できます。右側の値は、前に計算した幅です。レンダリングは次のとおりです。
(2)np.zeros
np.zerosは、その要素の内容が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]]
これ以上詳しくは説明しません。