PythonとOpenCVを使って画像の色を反転させるネガポジ変換(ネガティブ変換)を実装する方法

スポンサーリンク

今回は、PythonのPILを使って、画像にマイナス変換を行う方法を紹介します。

PILとは、Python Imaging Libraryの略称です。

このライブラリは、複数の画像変換のために使用されます。

PILを使うと、画像を扱うのが超簡単になり、何行もコードを書かずに画像のさまざまな部分を編集できるようになります。

スポンサーリンク

モジュールのインポート

この目的のために、PILのImageクラスを使用することにしましょう。

その結果、スクリプトの最初の行は次のようになります。

from PIL import Image

Imageクラスは、今回は多くのプロパティとメソッドで構成されています。

画像を開く、画像を見る、与えられた画像からピクセルを取り出す、画像内のピクセルを変更するためには、open, show, getpixel, putpixel メソッドが必要です。

では、画像を開くにはどうすればよいのでしょうか。

以下のようにすれば可能です。

1
2
3
4
5
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open("fig.jpg")
plt.axis('off')
plt.imshow(img)

画像の読み込み

ここで、imgは供給されたイメージのImage Objectで、Imageのパスで見つけることができます。

” Imageの色のネガティブ変換について見てみましょう。

1
2
3
4
5
6
7
8
9
10
w,h=img.size
for i in range(w):
    for j in range(h):
        r,g,b=img.getpixel((i,j))
        r=255-r
        g=255-g
        b=255-b
        img.putpixel((i,j),(r,g,b))
plt.axis('off')
plt.imshow(img)

ご存知のように、RGBカラーモデルでは、各色は0〜255の10進数のインデックスを持っています。

0が最も低く、255が最も高いことを表しています。

例えば、(255,255,255)は白を表す。

同様に、(0,0,0)は黒を表す。

色のネガティブ変換とは、以下のように色を反転させることを意味します。

色Xを(r,g,b)=(100,100,100)と表すとします。

これは次のように変換されます。

R=255-r =255-100=155 => R=155
同様に、G=155, B=155
したがって、Xの負変換色指標は、(R,G,B) =(155,155,155) となる。

画像のネガティブ変換を実装する

それでは、画像の各ピクセルに対して、色の負の変換を実装してみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PIL import Image
import matplotlib.pyplot as plt
img=Image.open("fig.jpg")
 
w,h=img.size
for i in range(w):
    for j in range(h):
        r,g,b=img.getpixel((i,j))
        r=255-r
        g=255-g
        b=255-b
        img.putpixel((i,j),(r,g,b))
plt.axis('off')
plt.imshow(img)
Negative Transformation Input

Pythonによる画像のネガティブ変換のコード

Negative Transformation Output
Negative Transformation Input 2
Negative Transformation Output 2

まとめ

画像のネガティブ変換を行う方法を学びました。

このチュートリアルは気に入りましたか?いずれにせよ、以下のチュートリアルをご覧になることをお勧めします。

  1. Python Patchify – 大きな画像からパッチを抽出する
  2. Pythonで衣服の画像を分類する – 完全ガイド
  3. Pythonで画像のノイズ除去 – ステップバイステップガイド
  4. ヒストグラムを使った画像の色の可視化 – Python OpenCV

お時間を割いていただきありがとうございました! 何か新しいことを学べたでしょうか!

タイトルとURLをコピーしました