OpenCVとPythonを使用してデータを処理する

目次

1>新しいIPythonセッションを作成します

2> PythonのNumPyパッケージを使用してデータを処理する

3> Pythonで外部データセットをロードする

4>データの視覚化にMatplotlibを使用する


1>新しいIPythonセッションを作成します

opencv-machine-learningフォルダーにジャンプします。

cd C:\Users\Kannyi\opencv-machine-learning

作成したconda環境をアクティブ化します。

activate py38

新しいIPythonセッションを開きます。

ipython

2> PythonのNumPyパッケージを使用してデータを処理する

NumPyモジュールを導入し、そのバージョンを確認します。

import numpy
numpy.__version__

npをエイリアスとして使用して、NumPyモジュールを導入し、そのバージョンを確認します。

import numpy as np
np.__version__

listコマンドを使用して、整数のリストを作成します。range(x)関数は、0からx-1までのすべての整数をスペルアウトします。

int_list=list(range(10))
int_list
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Pythonで整数リストint_listのすべての要素を反復処理し、str()関数を使用して各要素を処理し、文字列のリストを作成できます。

str_list=[str(i) for i in int_list]
str_list
#结果:['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

int_listのすべての要素を2回繰り返した結果:

int_list*2
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

int_listのすべての要素に2を掛けた結果。

int_arr=np.array(int_list)
int_arr
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

int_arr*2
#结果:array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

各NumPy配列には、次の属性もあります。

  • サイズ:配列内の要素の数。
  • ndim:次元の数。
  • dtype:配列のデータ型。
  • 形状:各寸法のサイズ。
print("int_arr size:", int_arr.size)
#结果:int_arr size: 10

print("int_arr ndim:", int_arr.ndim)
#结果:int_arr ndim: 1

print("int_arr dtype:", int_arr.dtype)
#结果:int_arr dtype: int32

print("int_arr shape:", int_arr.shape)
#结果:int_arr shape: (10,)

インデックスによって単一の配列要素にアクセスします。

int_arr[3]
#结果:3

配列の最後、つまり負のインデックスからインデックス作成を開始します。

int_arr[-1]
#结果:9

int_arr[-2]
#结果:8

配列内の添え字2〜4で要素をスライスします。

int_arr[2:5]
#结果:array([2, 3, 4])

配列内で添え字0〜4の要素をスライスします。

int_arr[:5]
#结果:array([0, 1, 2, 3, 4])

下付き文字が2の倍数(0を含む)である配列内の要素をスライスします。

int_arr[::2]
#结果:array([0, 2, 4, 6, 8])

配列内の要素を逆の順序でスライスします。

int_arr[::-1]
#结果:array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

3行5列の2次元配列を作成します。

arr_2d=np.zeros((3,5))
arr_2d
'''
结果:
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
'''

 すべての配列の初期値は0です。データ型が指定されていない場合、NumPyはデフォルトで浮動小数点型を使用します。

すべての配列の初期値が1である3×2×4の3次元配列を作成します。

arr_float_3d=np.ones((3, 2, 4))
arr_float_3d
'''
结果:
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
'''

配列をスライスして、arr_float_3dの最初の2次元配列を取得します。

arr_float_3d[0, :, :]
'''
结果:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])
'''

NumPy配列のdtype属性を8ビット整数に設定してから、配列内のすべての要素に255を掛けて、3×2×4の3次元配列を作成します。

arr_uint_3d=np.ones((3, 2, 4), dtype=np.uint8)*255
arr_uint_3d
'''
结果:
array([[[255, 255, 255, 255],
        [255, 255, 255, 255]],

       [[255, 255, 255, 255],
        [255, 255, 255, 255]],

       [[255, 255, 255, 255],
        [255, 255, 255, 255]]], dtype=uint8)
'''

3> Pythonで外部データセットをロードする

手書き数字(0〜9)のMNISTデータセットをダウンロードします。

from sklearn import datasets
mnist_data=datasets.fetch_openml("mnist_784")
x=mnist_data["data"]
y=mnist_data["target"]
mnist_data.data.shape
#结果:(70000, 784)

mnist_data.target.shape
#结果:(70000,)

すべてのターゲットの値を確認します(重複排除):

import numpy as np
np.unique(mnist_data.target)
#结果:array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype=object)

4>データの視覚化にMatplotlibを使用する

Matplotlibモジュールを導入するためのエイリアスとしてmplを使用します。

import matplotlib as mpl

Matplotlib.pyplotモジュールを導入するためのエイリアスとしてpltを使用します。

import matplotlib.pyplot as plt

図面には次のコマンドが自動的に表示されます。

%matplotlib

手動描画コマンド(通常、上記の%matplotlibコマンドを呼び出します。これは使用しないでください):

plt.show()

x軸上に0〜10の線形空間を作成し、100個のサンプリングポイントを作成します。

import numpy as np
x=np.linspace(0, 10, 100)

NumPyのsin関数を使用してすべてのxポイントの値を取得し、pltのプロット関数を使用して結果を描画します:

plt.plot(x, np.sin(x))

次の図面出力結果を取得します。

描画結果をC:\ Users \ Kannyiディレクトリに保存します。

plt.savefig('Figure1.png')

sklearnのデータセットを紹介します。

from sklearn import datasets

実際のデータをロードします。

digits=datasets.load_digits()

数字には2つの異なるデータフィールドがあります。

  • データフィールドデータ内のすべてのピクセルが大きなベクトルに配置されます。
  • 画像ドメイン:画像は各画像の8×8の空間配置を保持します。単一の画像を描画する場合は、画像を使用する方が適切です。
print(digits.data.shape)
#结果:(1797, 64)

print(digits.images.shape)
#结果:(1797, 8, 8)

NumPyの配列スライシングを使用して、データセットから画像を取得します。

img=digits.images[0, :, :]

 ここで、データの最初の行は、8×8 = 64ピクセルに対応する1797要素の配列から取得されます。

この画像を描画するには、pltのimshow関数を使用します。

plt.imshow(img, cmap='gray')

cmapパラメータはカラーマッピングを指定します。グレースケール画像の場合、グレーカラーマッピングがより効果的です。

次の図面出力結果を取得します。

pltのサブプロット関数を使用して、すべての図の例をプロットできます。

for image_index in range(10):
subplot_index=image_index+1
plt.subplot(2, 5, subplot_index)
plt.imshow(digits.images[image_index, :, :], cmap='gray')

サブプロットは、行数、列数、および現在のサブプロットインデックスを指定する必要があります。

image_indexは0から始まり、subplot_indexは1から始まります。

サブプロット関数には、キャンバスを提供すると見なすことができる描画位置を指定する機能があります。imshow関数は、対応するキャンバスに描画を配置することです。

次の図面出力結果を取得します。

おすすめ

転載: blog.csdn.net/Kannyi/article/details/112412993