Python openCV 画像の平滑化 とnp.ones()

画像の平滑化こちらをやってみた。
NumPy,matplotも知らないことが多い
【Numpy入門 np.ones】配列の全要素を1で初期化するones関数の使い方 要素が1の配列を出力。タプルで多元配列も可。2番目の引数は変数型。デフォルトはfloat64型
import numpy as np
x = np.ones(5) #array([1., 1., 1., 1., 1.])
x2 = np.ones((4,3)) 
 #[[1. 1. 1.]
 #[1. 1. 1.]
 #[1. 1. 1.]
 #[1. 1. 1.]]

NumPyのarange, linspaceの使い方(連番や等差数列を生成)
np.arange(初期値、終了値、ステップ)ステップは実数も可 NumPyで連番や等差数列(等間隔の配列ndarray)を生成するにはnumpy.arange()かnumpy.linspace()を使う。
arange()は間隔(公差)を指定、linspace()は要素数を指定という違いがあるので、目的によって使い分ける。
import numpy as np

print(np.arange(3))
# [0 1 2]

print(np.arange(3, 10))
# [3 4 5 6 7 8 9]

print(np.arange(3, 10, 2))
# [3 5 7 9]

print(np.arange(0.3, 1.0, 0.2))
# [0.3 0.5 0.7 0.9]

print(np.arange(-3, 3))
# [-3 -2 -1  0  1  2]

print(np.arange(10, 3))
# []

print(np.arange(10, 3, -2))
# [10  8  6  4]

numpy.linspace()も等差数列を生成するが、間隔(公差)ではなく要素数を指定する。
第一引数startに最初の値、第二引数stopに最後の値、第三引数numに要素数を指定する。それらに応じた間隔(公差)が自動的に算出される。
import numpy as np

print(np.linspace(0, 10, 3))
# [ 0.  5. 10.]

print(np.linspace(0, 10, 4))
# [ 0.          3.33333333  6.66666667 10.        ]

print(np.linspace(0, 10, 5))
# [ 0.   2.5  5.   7.5 10. ]

スライス[::-1]で逆順

print(np.arange(3, 10, 2)[::-1])
# [9 7 5 3]

resharp()で多次元配列に変換
print(np.arange(12).reshape(3, 4))
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(np.arange(24).reshape(2, 3, 4))
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
# 
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]

今日実行したもの
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv.png')

kernel = np.ones((5,5),np.float32)/25

print(kernel)

dst = cv2.filter2D(img,-1,kernel)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Avrraging')
plt.xticks([]),plt.yticks([])
plt.show()


コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

OpenCV 画像の足し算

OpenCV3とPython3で形状のある物体の輪郭と方向を認識する(主成分分析:PCA、固有ベクトル)