Python のデータ分析とマイニング - 画像処理

シリーズ記事ディレクトリ



序文

今日のビッグデータの普及により、データの処理と分析は重要な側面になっています。2 このセクションで学ぼうとしているのは、絵を扱うことです。コードを使用して一部の画像を処理します。そして絵の性質を認識すること。

写真のモザイク

私たちは皆、生活の中で自分の情報を明らかにしないように努めることがあることを知っています。写真は、基本的な外観情報を隠すためにモザイクを使用することがあります。写真にモザイク処理を施すソフトは携帯電話でも数多く出回っていますが、ほとんどのソフトはモザイク処理がすでに設定されており、その値を変更することはできません。そして今日、Python の matplotlib モジュールを使用して、画像のモザイクを実現できます。

1.matplotlib、numpy、およびその他のモジュールをインストールします

Pythonを書くときはVSコードを使う人もいれば、pycharmコンパイラもあります。ここでは vs コード コンパイラを紹介します。
1. win+R キーを押したまま、制御端末を開き、cmd コマンドを
ここに画像の説明を挿入
入力します; 2. 開いたユーザー制御インターフェイスでコマンドを入力しますpip install [模块];
ここに画像の説明を挿入
上図に示すように、ダウンロードするモジュールを入力し、モジュールは、ダウンロードが成功した後に使用できます。pycharm コンパイラを使用する学生の場合は、pycharm ターミナルを開いてpip install [模块]
.
3. モジュールの
使用 主に matplotlib のイメージを使用するため、モジュールをインポートします。

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt

モジュールをインポートしたら、画像を処理できます。

2.モザイク画

1. 写真をインポートする

matplotlib.image中的imread()函数就是用来读取图片的编码的。我们可以提前将要使用的图片放在该目录下,也可直接导入,这里博主就使用上次爬虫得到的图片。具体的图片你自己根据自己的情况来定
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg') #导入图片,解码
ここに画像の説明を挿入
彼の値を出力してみましょう。デコード後、画像が 3 次元配列であることがわかります。そして、彼に対する私たちの操作はすべて、このアレイに対する操作です。

2. ポジショニングエリア

モザイクが必要な位置を特定します ( imshow()函数)
ここに画像の説明を挿入
インポートした画像の周囲にスケールがあることがわかります。そのスケールに基づいて、コーディングする位置を推定できます。コーディング位置を見つけたら、
data1=data_jpg[50:320,150:350]
ここに画像の説明を挿入
それをカットすると、カット画像が得られます。次に、この画像に対して細かいピクセル セグメンテーションを実行します。
data1=data1[::27,::40]必要に応じてセグメンテーションの値を定義します. ここでは、画像のピクセルを 27 (Y 軸) と 40 (X 軸) の間隔で 1 つのピクセルに分割することを意味します。モザイクが形成されます。
ここに画像の説明を挿入

3. 写真の合成

最後に、上でモザイク化された画像領域を元の画像にコピーします。

for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]

最後に、画像を表示するだけです。保存する必要がある場合は、savefig()関数を使用するだけです。
では、最終的な効果を見てみましょう。
ここに画像の説明を挿入
源代码展示;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)

絵のステッチ

モザイク化に加えて、python 戦隊画像の処理は、変色、仮想化、グレー画像処理、画像のステッチングなど
concatenate()函数
の機能も実行できます。画像のステッチングは、concatenate() 関数によって実現されます。
ここに画像の説明を挿入

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

グレースケール画像

1. max() メソッド

前述のように、写真の構成は 3 次元配列であり、その中の数字はその画像の特徴を表しています。したがって、画像のグレースケールは、位置、値、および寸法を変更することにより、画像の色と形状を変更することもできます.
次の例を見ることができます;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
[[[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [201 186 179]]

 ...
...
  ...
  [188 150 137]
  [189 151 138]
  [189 151 138]]]
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)#axis取-1就是为了得到最里面的值;
plt.imshow(s,cmap='gray') #cmap参数表示最后的颜色,gray时灰色;

結果を示す;
ここに画像の説明を挿入

Two.min() メソッド

max() メソッドと同様なので、ここでは詳しく説明しません。コードを直接貼り付けてください。

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')
3. Average メソッドの mean() 関数
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')

効果を示します
ここに画像の説明を挿入
が、上記の方法で得られる効果は基本的に同様です。だから、そのうちの1つだけをマスターしてください。

4.加重平均法

平均法とは異なり、加重平均法は、それ自体で与えられたデータに従って灰色にすることができます。

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.01,0.01,0.01]  #这里的值自己更改,值越大,灰度化颜色偏深,反之则偏浅.
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

ここに画像の説明を挿入

画像のセグメンテーション

画像のごく一部しか必要ない場合もありますが、関数を分割することでそれを行うことができますsplit()

one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1) #中间的参数表示我们分割的区间;
plt.imshow(data4)
plt.imshow(one)
plt.imshow(two)

結果を示す;

ここに画像の説明を挿入

要約する

今回紹介するのはここまでですが、写真の加工方法はたくさんありますが、ここではあまり紹介しませんが、後ほど更新していきます。コードを使用して画像を処理すると、携帯電話のソフトウェアの制限に限定されず、柔軟な使用スペースがたくさんあるため、これらの方法を習得することも非常に有益です.
ソースコードは以下に配置されており、興味のある学生は見てみることができます.

ソースコード


import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data=mpimg.imread("./onetemp.jpg")
data1=data.copy()
#打马赛克;
#第一步,找出要打马赛克的位置;
data2=data1[200:900,100:800]
#第二步,将图片比例的收缩;
data2=data2[::35,::35]
print(data2.shape)
datatemp=data1.copy()
#第三步,替换,将现有的替换到原来的,记住两个尺寸不一样;
for i in range(20):
    for j in range(20):
        datatemp[200+35*i:200+35*i+35,100+35*j:100+35*j+35]=data2[i,j]
plt.imshow(datatemp)

#图片的拼接;
data4=np.concatenate([data,data])#axis=1时,并排着;
plt.imshow(data4)
data5=np.concatenate([data,data],axis=1)
plt.imshow(data5)
#图片切割;
one,two,three=np.split(data,indices_or_sections=[400,600],axis=1)
plt.imshow(one)
plt.imshow(two) 
plt.imshow(three)

#图像灰度化;
#第一种方法,最小值法;
data=mpimg.imread('./onetemp.jpg')
#data=np.min(data,axis=-1)
#plt.imshow(data,cmap='gray')
#第二种方法,最小值法;
data1=np.max(data,axis=-1)
#plt.imshow(data1,cmap='gray')
#第三种,平均值法;
data3=np.mean(data,axis=-1)#等价于data.mean()函数;
#plt.imshow(data3,cmap='gray')

#第四种方法,加权平均值法,dot函数;
weight=[0.299,0.345,0.456]
data6=np.dot(data,weight)
plt.imshow(data6,cmap='gray')


data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)


#照片的合集;
import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

#图片的切割;
one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1)
plt.imshow(data4)
#plt.imshow(one)
#plt.imshow(two)

#图像的灰度化;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')
#加权平均值法;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.31,0.41,0.53]
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

#平均值法;
smp=np.mean(data_jpg,axis=-1)
plt.imshow(smp,cmap='gray')

#最小值法;
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')


おすすめ

転載: blog.csdn.net/qq_59931372/article/details/127470557