目次
Python では、いくつかのサードパーティ ライブラリは主に画像や Web ページなどのバイナリ ファイルを解析するために使用されます。
- PIL: 最も一般的に使用される画像処理サードパーティ ライブラリ
- request: ネットワーク接続を通じて Web ページをダウンロードするためのサードパーティ ライブラリ
- beautifulsoup4: Web ページ形式を解析してデータを取得するためのサードパーティ ライブラリ
1. 画像ファイルの読み書き
PIL ライブラリには 21 のクラスが含まれており、その中で Image クラスは PIL ライブラリの非常に重要なクラスです。Image クラスは、イメージ ファイルの読み取り、書き込み、処理のためのさまざまなメソッドを提供します。これらのメソッドを使用するには、Image をインポートする必要がありますPIL ライブラリからのモジュール。
from PIL import Image
手順:
まずファイルを開き、画像ファイル オブジェクトを作成してから処理し、処理後にファイルを閉じます。
画像ファイルの読み込みには、image クラスの open メソッドを使用します。読み込みに失敗した場合は IOError が表示され、読み込みに成功した場合は Image オブジェクトが返されます。
Image.open()
画像ファイルの 3 つの共通プロパティを表示します。
- format: 画像の形式またはソースを識別します。画像がファイルから読み込まれなかった場合は None を返します。
- size: 画像の幅と高さ (ピクセル単位)、2 つのタプル (幅、高さ) を返します。
- モード: 画像のカラー モード。L はグレースケール イメージを表します。RGB はトゥルー カラー イメージを表します。CMYK は印刷されたイメージを表します。
例:
from PIL import image
im=Image.open('d:\\Python\\1.jpg')
print(im.format,im.size,im.mode)
2. 画像ファイルの処理
画像ファイルを開いた後、処理のために Image クラスのさまざまなメソッドや他のモジュールを呼び出すことができます。
一般的に使用される画像処理方法
画像表示 | 見せる() |
画像保存 | サヴァ() |
画像のコピー&ペースト | クロップ(ボックス)、ペースト(領域,ボックス) |
画像の拡大縮小と回転 | 回転(角度)、転置() |
画像の色変換 | 分割()、マージ()、変換() |
画像のフィルタリングと補正 | PIL ライブラリの ImageFilter モジュールと ImageEnhance モジュール |
逐次画像処理 | シーク()、テル() |
1. 画像表示
画像を表示するにはshow()を使用します。
例:
from PIL import Image
# 图像的显示
im=Image.open('csdn.webp')
im.show()
2.画像を保存する
sava() は画像を保存するために使用されます。パラメータは 2 つあります: ファイル名 filename と画像フォーマット format。
呼び出し時に保存形式を指定しない場合、画像ファイルの拡張子に従って自動的に保存されます。
形式が指定されている場合は、その形式に従って保存されます。
sava() は画像形式の変換を実現できます。たとえば、csdn.jpg を png 形式のファイルに保存します。
例:
"""图像的保存"""
from PIL import Image
im=Image.open('csdn.webp')
im.save('csdn.jpg')
3. 画像をコピーして貼り付けます
Crop(box) は、画像から長方形の画像をコピーします。パラメーターボックスは4 要素のタプルであり、4 つの要素はそれぞれ長方形の左上隅と右下隅の水平座標と垂直座標を表します。座標系の原点 ( 0, 0 ) は、画像の左上隅です。past(region, box) は、ある画像を別の画像に貼り付けます。領域は貼り付けられる画像オブジェクトを指し、変数box は貼り付け領域を指定します。2 タプルの場合は、貼り付けられた領域の左上隅の水平座標と垂直座標を表します。4 タプルの場合は、貼り付け領域の左上隅の水平座標と垂直座標を表します。タプルでは、左上隅と右下隅の水平座標と垂直座標を表します。空の場合、デフォルトは(0, 0)になります。4 タプルを指定した場合、貼り付ける画像のサイズは貼り付け領域のサイズと同じでなければなりません。寸法が一致しない場合、貼り付けられた画像は現在の画像のモードに変換されます。
例:
"""图像的拷贝与粘贴"""
from PIL import Image
im=Image.open('csdn.jpg')
#定义拷贝区域
box=(100,20,281,202)
#拷贝图像,返回新的图像对象
region=im.crop(box)
region.show()
#将图像region粘贴到图像im左上角
im.paste(region,(0,0))
#将剪裁下来的图像粘贴到原始图像上
im.save('new.jpg')
im1=Image.open('new.jpg')
im1.show()
トリミングされた画像:
切り取った画像を元の画像の左上隅に配置します。
4. 画像の拡大縮小と回転
Simply(size) は、パラメータsizeで指定されたサイズに従って画像を調整し、コピー ファイルを生成します。rotate(angle) は、パラメータangleで指定された角度に従って画像を反時計回りに回転し、コピー ファイルを生成します。transpose()メソッドは、左右反転、上下反転、反時計回りの回転(90 、180 、270度)などのいくつかの回転メソッドを事前定義します。
例:
"""图像的缩放与旋转"""
from PIL import Image
im=Image.open('csdn.jpg')
#缩小尺寸
im.resize((200,100))
#逆时针旋转45°
out=im.rotate(45)
out.show()
# 左右反转
out=im.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
out.show()
#上下反转
out=im.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
out.show()
# 逆时针旋转90°
out=im.transpose(Image.Transpose.ROTATE_90)
out.show()
5. 画像の色変換
画像にはさまざまなカラー モードがあります。RGBモードでは、各ピクチャは重ね合わされた 3 つのカラー チャネルR 、G 、Bで構成されます。Split()を使用して 3 つのカラー チャネルを分離し、各色を個別に処理してから、merge()を使用して複数のチャネルを結合して新しい画像を形成できます。また、convert()を使用して、画像を別のカラー モードパラメータに変換することもできます。
例:
"""图像的颜色变换"""
from PIL import Image
im=Image.open('csdn.jpg')
#分离三个颜色通道
r,g,b=im.split()
# 更换r、g、b颜色后合成新图像
im=Image.merge('RGB',(b,r,g))
im.show()
6. 画像のフィルタリングと補正
PILのImageFilterモジュールとImageEnhanceモジュールは、画像をフィルタリングおよび強化するためのメソッドを提供します。ImageFilterモジュールは、画像の輪郭、画像の鮮明化、画像の平滑化などを抽出できる10 個の画像フィルタリング メソッドを事前定義しており、主に filter ()メソッドを使用して実装されます。ImageEnhanceモジュールは、画像の明るさ、コントラスト、彩度などを強化 (または弱める) できる画像強調処理に特に使用されます。
例:
"""图像的过滤与增强"""
from PIL import Image
from PIL import ImageFilter
from PIL import ImageEnhance
im=Image.open('csdn.jpg')
detfilter=im.filter(ImageFilter.DETAIL)#图像细节增强
detfilter.show()
confilter=im.filter(ImageFilter.CONTOUR)#图像轮廓效果
confilter.show()
smtfilter=im.filter(ImageFilter.SMOOTH)#图像平滑
smtfilter.show()
sharpfilter=im.filter(ImageFilter.SHARPEN)#图像锐化
sharpfilter.show()
enhbrightim=ImageEnhance.Brightness(im)
brightness=5
eng_bri=enhbrightim.enhance(brightness)#图像亮度增强为原来的1.5倍
eng_bri.show()
enhbrightim=ImageEnhance.Contrast(im)
contrast=5
enh_con=enhbrightim.enhance(contrast)#图像对比度增强为原1.5倍
enh_con.show()
ディテール強調、輪郭効果、スムージング、シャープネス、明るさ強調、コントラスト強調
PIL はピクセルの直接操作もサポートしています。たとえば、ai.jpg を3 つのカラー チャンネルに分割し、そのうちの 1 つのチャンネルを強めたり弱めたりしてから、Mergeを使用してチャンネルをマージすることで、画像のトーンを変更します(暖色系と冷色系の入れ替え)などです。たとえば、レイヤーbの各ピクセルの明るさは20% 増加します。
im=Image.open('csdn.jpg')
r,g,b=im.split()
out=b.point(lambda i:i*1.2)
im=Image.merge('RGB',(r,g,b))
im.show()
7. 連続画像処理
シーケンス画像とは、複数のフレームの画像を画像ファイルに保存し、一定の時間間隔で再生してアニメーション効果を形成するものです。gif画像は一連の画像です。PIL は、このような動的な画像の基本的な処理方法も提供します。このような画像ファイルをopen()で開くと、最初のフレーム画像が自動的にロードされ、seek() メソッドとTell()メソッドを使用してフレーム間を移動できます。Seek(frame) は指定された画像フレームにジャンプすることを意味し、tell()は現在のフレームのシリアル番号を返します。
例:
コードはtry-excel構造を採用しており、まずtry内の文を実行し、画像が最後の画像フレームにジャンプした後、再度ジャンプ(im.tell()+1)すると例外が発生します。 、次の例外文を実行するとプログラムが終了します。
"""图像的序列操作"""
from PIL import Image
# 读入gif文件
im=Image.open('pai.gif')
try:
im.save('frame{:02d}.png'.format(im.tell()))
# 保存图像帧为png文件
while True:
# 跳转到下一帧图像
im.seek(im.tell()+1)
im.save('frame{:02d}.png'.format(im.tell()))
except:
print('处理结束')