記事のディレクトリ
序文
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()メソッドがあります(順序は(left、top、right、bottom)です。これは、トリミングされた画像である新しい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フォントライブラリ
- 運転結果