画像処理操作説明のPythonのPILライブラリ

1.はじめに

2. PIL何を行うことができますか?

    PILは、画像処理および関連たくさんのことを行うことができます。

  • 画像保管(画像アーカイブ)PILは、バッチジョブの画像保管画像に最適です。あなたはその上の画像フォーマット、画像の印刷とを変換し、サムネイルを作成PILを使用することができます。
  • 画像ショー(画像表示)PIL新しいバージョンはTkの光画像、BitmapImageのほか、WindowsのDIBおよびその他のインタフェースをサポートしています。PIL支持多くのGUIフレームワークインタフェースは、画像表示のために使用することができます。
  • 画像処理(画像処理)PILは、フィルタ(フィルタ)、ならびに色空間変換として畳み込みカーネル(コンボリューションカーネル)の多数を使用して、加工点を含む基本的な画像処理機能を含みます。PILライブラリーサイズは、変換、画像の回転、画像の任意のアフィン変換をサポートします。PILあなたの表示画像のいくつかの統計的性質を許可するいくつかのヒストグラム方法。これは、自動画像コントラスト強調、ならびにようにグローバルとの統計的分析のために使用することができます。

3. PILを使用する方法?

3.1 Imageクラス

    PIL Imageクラスはコアクラスでは、そのようなので、上のファイル、画像処理の他の形態、または再作成した画像から画像をロードし、あなたがそれを初期化する多くの方法が、あります。以下は、PILのImageクラス一般的に用いられている方法です。

画像処理操作説明のPythonのPILライブラリ

  • オープン(ファイル名、MODE) オープン画像)。次のコードは、ファイルから画像を開く方法を示しています。

>>> PILインポートイメージから
Image.open >>>( "niuniu.jpg"、 "R")
<PIL.JpegImagePlugin.JpegImageFile画像モード= RGBサイズ= 0x7F715DC61320で450x600>
>>> IM = Image.open(」 niuniu.jpg」、 "R")
>>>プリント(im.size、im.format、im.mode)
(450、600)JPEG RGB

 画像処理操作説明のPythonのPILライブラリ

Image.open返し画像オブジェクトが有するsize,format,mode属性であって、前記size(ピクセル単位の)幅と高さを表す画像を、format一般的なJPEG、PNGおよび他のフォーマットを含む画像フォーマットを表すmodeモード画像を示し、定義されたピクセル型画像奥行きがありますなどは、その上のRGB、HSVと共通しています。一般グレースケール画像で表される「L」(輝度)は、「RGB」はトゥルーカラー画像を表し、「CMYK」は、予め圧縮された画像を表します。あなたがImageオブジェクトを開くために取得したら、画像処理のための多くの方法を使用することができ、そしてそのような使用は、im.show()上記で得られた画像を表示することができます。

  • 保存(ファイル名、フォーマット)(指定された形式で画像を保存)
>>> im.save("linuxidc.png",'png')

上記のコードは、PNG形式に再画像として保存されます。

  • (サイズ、リサンプル)をサムネイル(サムネイルを作成)
>>> im.thumbnail((50,50),resample=Image.BICUBIC)
>>> im.show()

上記のコードは、サムネイル指定されたサイズ(サイズ)を作成し、その操作方法をサムネイルことに留意する必要がある戻り値がNone、現場です。最初のパラメータは、サムネイルで指定されたサイズ、第二の試料であり、Image.BICUBICPIL.Image.LANCZOSPIL.Image.BILINEAR、は、PIL.Image.NEAREST4つのサンプリング。デフォルトImage.BICUBIC

  • 作物は、あなたは(ボックス)できます(矩形領域をトリミング)
>>> im = Image.open("niuniu.jpg","r")
>>> box = (100,100,200,200)
>>> region = im.crop(box)
>>> region.show()
im.crop()

画像処理操作説明のPythonのPILライブラリ

上記のコードは、矩形箱IM画像上の領域をトリミングし、次に表示されます。ボックスは、それぞれ4桁のタプル(lower_right_x、upper_left_y、upper_left_x、lower_right_y)、クロップ矩形領域Xの左上隅、y座標はx、y座標の右下隅の左上隅の座標であり、所定の画像であります(0,0)、X軸、Y軸の幅方向、高さ方向は、各画素は、座標単位を表し、です。作物は、()を返すImageオブジェクトのまま。

  • TRANSPOSE(方法)(画像の回転や反転)
>>> im_rotate_180 = im.transpose(Image.ROTATE_180)
>>> im_rotate_180.show()

画像処理操作説明のPythonのPILライブラリ

180°の回転反時計回りに上記のコードIM、その後表示、method転置パラメータが選択されているモードを反転または回転の種類を示しており、値が選択されてもよいである:
    - Image.FLIP_LEFT_RIGHT、左右反転画像を示す
    - Image.FLIP_TOP_BOTTOM 、上下反転画像を示す
    - Image.ROTATE_90は、画像を反時計回りに回転°を示す90
    - Image.ROTATE_180を、画像は反時計回りの回転を示し180゜
    - Image.ROTATE_270、画像は反時計回りに回転度を示す] 270。
    - Image.TRANSPOSE、 (90°回転を時計回りに相当)転置画像を表し
    、Image.TRANSVERSE転置画像を示し、その後、左右反転-

  • ペースト(領域、箱、マスク)(他の画像ペーストに1枚の画像)
>>> im.paste(region,(100,100),None)
>>> im.show()

上記コードイメージ領域を左上隅(100、100)の位置に接着されます。画像領域は、物体に貼り付け位置を貼り付けボックス、二つの要素の組、ペーストの左上領域の座標、または4つの要素の組であってもよく、左右の角を示していますこれは、座標。yesの場合、タプルの4つの要素は、大きさや大きさの領域のボックスが一致していなければならない場合は、それ以外の場合は、地域と同じサイズに変換されます。

  • スプリット() 色チャネル分離)
>>> r,g,b = im.split()
>>> r.show()
>>> g.show()
>>> b.show()

画像処理操作説明のPythonのPILライブラリ

スプリット()メソッドは、例えば、RGBの画像はR、G、Bの3つのカラーチャネルを分離することができ、各チャンネルの元の画像を分離することができます。

  • マージ(MODE、チャネル)(カラーチャンネルをマージ)
>>> im_merge = Image.merge("RGB",[b,r,g])
>>> im_merge.show()

画像処理操作説明のPythonのPILライブラリ

方法分割及びマージ方法はマルチチャネル画像を形成するために一緒にマージ単一チャネルの複数のどの配列、相対的であり、モードは、「RGB」は、単一のチャネルが複数のシーケンスで構成されているチャネルとして合成画像後モード、です。

  • サイズを変更(サイズ、リサンプリング、ボックス)

>>> im_resize = im.resize((200,200))
>>> im_resize
<PIL.Image.Image画像モード= RGBサイズ= 0x7F715B19CCF8で200×200>
>>> im_resize.show()
>>> im_resize_box = im.resize( (100,100)、箱=(0,0,50,50))
>>> im_resize_box.show()

画像処理操作説明のPythonのPILライブラリ

サイズ後のサイズが変換、リサンプリングリサンプリング法が使用されるが、依然として存在している、元の画像サイズを変換する方法をリサイズImage.BICUBICPIL.Image.LANCZOSPIL.Image.BILINEARPIL.Image.NEARESTデフォルトで、4つのサンプリング方法PIL.Image.NEAREST、ボックスは画像のサイズを変更するように指定された領域であります4元の指定されたセットを持つ領域(意味と同じボックスの上)。

  • (モード、マトリックス、ディザ、パレット、色)に変換(モード转换)
>>> im_L = im.convert("L")
>>> im_L.show()
>>> im_rgb = im_L.convert("RGB")
>>> im_rgb.show()
>>> im_L.mode
'L'
>>> im_rgb.mode
'RGB'

画像処理操作説明のPythonのPILライブラリ

この方法は、一般的に「RGB」(真のカラー画像)で、画像モードの変更に変換することができ、「L」(グレースケール)、「CMYK」(図圧縮)の間の変換。上記のコードは、第1の画像をグレースケールに変換した後、トゥルーカラー画像からグレースケールに変換されます。理論的には、変換が成功したんが、それは、真のカラー画像から、その階調変換注目すべきであるが、実際に本来の真のカラーモード(一意ではない)に復帰することは困難です。

  • フィルタ(フィルタ)(フィルタを適用)
>>> im = Image.open("niuniu.jpg","r")
>>> from PIL import ImageFilter
>>> im_blur = im.filter(ImageFilter.BLUR)
>>> im_blur.show()
>>> im_find_edges = im.filter(ImageFilter.FIND_EDGES)
>>> im_find_edges.show()
>>> im_find_edges.save("linuxidc.jpg")
>>> im_blur.save("linuxmi.jpg")

いくつかのフィルタ方法は、エッジ、コーナー操作を見つけるために、そのようなファジー動作として、原画像フィルタ演算に適用されてもよいです。フィルタは、フィルタ関数であるPIL.ImageFilterようなフィルタ関数の組み込み関数の数の定義BLUR(ファジー操作)、 GaussianBlurガウスぼかし)、 MedianFilterメディアンフィルタ)、 FIND_EDGESルックアップ側)等が挙げられます。下の図1:

画像処理操作説明のPythonのPILライブラリ

図1

  • 点(LUT、MODE) 操作画像ピクセル)
>>> im_point = im.point(lambda x:x*1.5)
>>> im_point.show()
>>> im_point.save("linuxidc.jpg")

方法ポイント操作が画像の1画素に対して行うことができる、匿名関数ポイントコードを通過させる上記の方法は、画像の各ピクセルのサイズはデフォルトで元である、モードモードの画像が返され、1.5が乗算され表しますモードの画像は同じです。図2は、元のdog.jpgのim_point.jpg間動作点後の比較です。

画像処理操作説明のPythonのPILライブラリ

以下は、の組み合わせであるpoint関数、split関数、paste機能及びmerge小例関数。

>>> source = im.split()
>>> R,G,B = 0,1,2
>>> mask = source[R].point(lambda x: x<100 and 255) 
>>> # x<100,return 255,otherwise return 0
>>> out_G = source[G].point(lambda x:x*0.7)
>>> # 将out_G粘贴回来,但是只保留'R'通道像素值<100的部分
>>> source[G].paste(out_G,None,mask)
>>> # 合并成新的图像
>>> im_new = Image.merge(im.mode,source)
>>> im_new.show()
>>> im.show()
  • ImageEnhance() 画像強調)
>>> from PIL import ImageEnhance
>>> brightness = ImageEnhanBce.Brightness(im)
>>> im_brightness = brightness.enhance(1.5)
>>> im_brightness.show()
>>> im_contrast = ImageEnhance.Contrast(im)
>>> im_contrast.enhance(1.5)
<PIL.Image.Image image mode=RGB size=296x299 at 0x7F62AE271AC8>
>>> im_contrast.enhance(1.5).show()

ImageEnhanceは、コントラスト(コントラスト)等を高めるために、明るさ(輝度)を高めるために、主に、画像強調のために、PILのサブクラスです。上記のコードは、元の画像の50%の輝度増加する、コントラストも50%増加しました。

  • ImageSequence() イメージのシーケンスを処理する)
    次のコードは、すべてのフレームにGIF画像を横断し、それぞれの画像として保存することができ
>>> from PIL import ImageSequence
>>> from PIL import Image 
>>> gif = Image.open("pipixia.gif")
>>> for i,frame in enumerate(ImageSequence.Iterator(gif),1):
...     if frame.mode == 'JPEG':
...         frame.save("%d.jpg" %i)
...     else:
...         frame.save("%d.png" % i)

反復子を使用して、上述した実施形態に加えて、1つは、次のコードとして、GIFを読み取ることができます。

>>> index = 0
>>> while 1:
...     try:
...         gif.seek(index)
...         gif.save("%d.%s" %(index,'jpg' if gif.mode == 'JPEG' else 'png'))
...         index += 1
...     except EOFError:
...         print("Reach the end of gif sequence!")
...         break

最後の1つのGIFに上記のコードを読んだ後、それは例外EOFErrorがスローされますので、我々はそれに例外をキャッチ。

おすすめ

転載: www.linuxidc.com/Linux/2019-09/160566.htm