Python画像処理用のPIL


序文

PIL(Python Imaging Library)はPython画像処理ライブラリです。現在、PILプロジェクトの開発は停止しています。最後の更新は2011年でした。
強調:PILはPython3.xをサポートしていません

PillowはPythonの画像処理ライブラリでもあり、PILとは異なります。PillowはPIL Forkコードの特定のバージョンであり、PillowはPILのほとんどの用途と互換性があり、積極的に開発されています。さらに重要なことに、PillowライブラリはPython3.xをサポートしています。 、枕をお勧めします。

  • インストール

ピップインストール枕

ここに画像の説明を挿入

基本的な画像処理:PIL
高度な画像処理:Opencv


1.枕の使用

1.1画像作成テスト

枕は新しい空白の画像を作成することもできます。最初のパラメーターはmodeで、これは色空間モードです。2番目のパラメーターは画像の解像度(幅x高さ)を指定し、3番目のパラメーターはcolorです。

  • 一般的に使用される色の名前を直接入力できます。「赤」など
  • 赤の#FF00Oなど、16進数で表される色を入力することもできます。
  • 赤の場合は(255、0、0、255)や(255、0、0)などのタプルを渡すこともできます。

1.2色とRGBA

RGB:赤緑青アルファ(透明度)
コンピューターは通常、画像をRGB値として表現するか、アルファ値(透明度、透明度)を追加します。RGBA値Pillowでは、RGBAの値は、それぞれR、G、IB、およびAの4つの整数で構成されるタプルとして表されます。整数の範囲は0〜255です。RGBのすべての0は黒を表すことができ、すべての255は黒を表します。
(255、0、0、255)は、R成分が最大で、G成分とB成分が0であるため、赤を表していると推測できます
ただし、アルファ値が0の場合、色に関係なく、色は見えず、透明であると理解できます
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

次に、手順を使用します

2.1画像読み取りテスト

コードは次のとおりです(例):

frim PIL import Image

image = Image.open("dog.png")
print(img.format)
print(img.mode)
print(img.size)
img.show() #show方法显示图片
  • 出力

PNG
RGB
(600,375)

画像は、RGB(赤、緑、青)とニュートンの3色の3色で構成されています。** split()**関数は、画像を色に応じて3つの画像、つまり単色ディスプレイの画像に分解できます。 、デフォルトはグレースケール表示画像です

r,g,b = img.spilt()
#单通道显示图像
b.show()

ここに画像の説明を挿入
元々分割されていた3色がシャッフルされて再結合され、画像の色が変わり、元の緑色の画像が赤色の画像になりました。

# 打乱顺序,重新合并
img = Image.merge("RGB",(g,b,r))
img.show()

ここに画像の説明を挿入

2.2トリミング画像

Imageには、長方形の領域タプルを受け取るcrop()メソッドがあります(順序は(lefttoprightbottom)です。これは、トリミングされた画像である新しいImageオブジェクトを返し、元の画像には影響しません。
コードは次のとおりです(例):

cropimg = img.crop((100,100,400,400)) 
cropimg.show() 

ここに画像の説明を挿入

2.3コピーアンドペースト

画像のコピー機能は、その名前が示すように元の画像のコピーを生成し、このコピーに対する操作は元の画像に影響を与えません。paste()メソッドは、画像を別の画像の上に貼り付ける(オーバーレイする)ために使用されます。それを呼び出す人は誰でも、Imageオブジェクトを直接変更します。
ここに画像の説明を挿入
元の画像の情報を後で使用する場合、情報が変更されるため非常に面倒です。したがって、貼り付ける前にcopy()を使用してコピーをコピーすることをお勧めします。コピー操作は、元の画像情報には影響しません。プログラムで元の画像情報が変更されていますが、ファイルを保存するときに使用される他のファイル名は、変更が有効にならないのと同じであるため、元の画像を表示しても変更されません。

2.4犬の身分証明書の撮影

トリミングされた画像の幅と高さを間隔として、ID写真を撮るのと少し似ているループ内のコピーに連続的に貼り付けられます。

コードは次のとおりです(例):

# 截取狗狗图片区域
cropimg = img.crop((200,120,300,220))

crop_width, crop_height = cropimg.size
width,height = img.size

copyimg = img.copy() # 副本 copyimg = img
for left in range(0,width,crop_width):
	for top in range(0,height,crop_height):
		copyimg.past(cropimg,(left,top)) # 粘贴到copyimg
		
copyimg.show()

ここに画像の説明を挿入

2.5画像のサイズを変更する

サイズ変更このメソッドは、指定された幅と高さの新しいImageオブジェクトを返し、幅と高さを含むタプルをパラメーターとして受け入れます。幅と高さの値は整数です。
幅と高さを同じに設定すると、正方形の画像になり、画像が引き伸ばされます

コードは次のとおりです(例):

width,height = img.size
resizeimg = img.resize((width,width))
resizeimg.show()

ここに画像の説明を挿入

2.6画像を回転および反転します

回転する元の画像を変更せずに、回転した新しいImageオブジェクトを返します。反時計回りの回転。
保存は画像を直接保存できます

コードは次のとおりです(例):

img.rotate(90).save("rotate90.png")
img.rotate(270).save("rotate270.png")
img.rotate(20).save("rotate20.png")
img.rotate(180).save("rotate180.png")
  • 画像のミラーフリップ
img.transport(Image.FLIP_LEFT_RIGHT).show()
img.transport(Image.FLIP_TOP_BOTTOM).show()

2.7画像フィルタリング

枕の使用ImageFilter画像のぼかし、エッジ強調、シャープネス、スムージングなどの一般的な操作を簡単に実行できます。

コードは次のとおりです(例):

from PIL import ImageFilte

# 高斯模糊
image.filte(ImageFilter.GaussianBlur).show()
# 普通模糊
image.filte(ImageFilter.BlUR).show()
# 边缘增强
image.filte(ImageFilter.EDGE_ENHANCE).show()
# 找到边缘
image.filte(ImageFilter.FIND_EDGES).show()
# 浮雕
image.filte(ImageFilter.EMBOSS).show()
# 轮廓
image.filte(ImageFilter.CONTOUR).show()
# 锐化
image.filte(ImageFilter.SHARPER).show()
# 平滑
image.filte(ImageFilter.SMOOTH).show()
# 细节
image.filte(ImageFilter.DETAIL).show()

2.8ImageDrawモジュール

ImageDrawモジュールは、Imageインスタンスで簡単な2D描画を実行できるDrawクラスを提供します

  • 描画クラスのペイント機能
  • コード
  • アーク
  • pieslice画扇形
  • 楕円描画楕円
  • 線画線/ポリライン
  • ポイントポイント
  • ポリゴン描画ポリゴン
  • 長方形描画長方形
  • テキストテキスト

3、中国語の確認コード

3.1ランダムカラーの背景画像

  • リファレンスライブラリ

PILインポートImage、ImageDraw
インポートランダムから

コードは次のとおりです(例):

from PIL import Image,ImageDraw
import random

# 生成一张背景图,随机颜色

# 定义一个函数生成随机颜色
def randcolor():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

size = width,height = 240,60
img = Image.new('RGB',size,randcolor())#随机生成颜色

# 每个像素填充随机色
draw = ImageDraw.Draw(img) # 画笔
for x in range(width):
    for y in range(height):
        draw.point((x,y),fill=randcolor())

img.show()

ここに画像の説明を挿入

3.2ランダムフォント

コードは次のとおりです(例):

# 定义随机字库
chars = "百度新闻是包含海量资讯的新闻服务平台,真实反映每时每刻的新闻热点"

def randChar():
    return chars[random.randint(0,len(chars)-1)]

3.3ぼかし処理

コードは次のとおりです(例):

......
font = ImageFont.truetype(r'C:\Windows\Fonts\SIMYOU.TTF',36,)
......

# 写字 (width/4 * i + 10 ,10)这是位置不断运行 不断调整
for i in range(4):
    draw.text((width/4 * i + 10 ,10),randChar(),font=font,fill=randcolor1())

# 普通模糊处理
img = img.filter(ImageFilter.BLUR)
  • Windowsフォントライブラリ

ここに画像の説明を挿入

  • 運転結果
    ここに画像の説明を挿入

ソースコード

おすすめ

転載: blog.csdn.net/HG0724/article/details/113186934