ホームページ  >  記事  >  バックエンド開発  >  Python画像のグレースケール変換と画像配列の操作方法

Python画像のグレースケール変換と画像配列の操作方法

高洛峰
高洛峰オリジナル
2017-03-13 18:14:492155ブラウズ

この記事では、主に Python画像のグレースケール変換と画像 配列の操作に関する情報を紹介します。必要な方は、

Python と numpy を使用して、画像配列を直接操作することで一連の基本的な 画像処理 を完了することができます。

numpy の紹介:

NumPy は非常に有名な Python 科学計算ツールキットであり、配列

オブジェクト

(ベクトル、行列、画像などを表すために使用される) や線形代数 などの便利なツールが多数含まれています。機能配列オブジェクトは、行列積、転置、方程式系の解法、ベクトル積、正規化などの重要な演算を配列に実装できます。これは、画像の変形、モデリングの変更、画像の分類、画像のクラスタリングなどの基礎を提供します。

基本的な Python 画像操作に関する前回の記事では、画像を読み込むときに、

array

() メソッドを呼び出すことによって画像が NumPy 配列オブジェクトに変換されます。 NumPy の配列オブジェクトは多次元であり、ベクトル、行列、イメージを表すために使用できます。多くの画像処理は、画像の配列を直接操作することで実行できます。 numpy についてはインターネット上にたくさんの情報があり、Python 科学計算の基礎として真剣に勉強する価値があります。

基本的な画像操作に画像配列を使用します:

画像配列を理解します:

次のプログラムを通じて、画像とグレースケール画像の画像配列、および numpy 配列のスライスを見ていきます。

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("./source/test.jpg"))
#输出数组的各维度长度以及类型
print im.shape,im.dtype
#输出位于坐标100,100,颜色通道为r的像素值
print im[100,100,0]
#输出坐标100,100的rgb值
print im[100,100]及类型
print im.shape,im.dtype


演算結果:

(600, 500, 3) uint8

64

[64 117 195]

表示されるのは、横座標、縦座標、カラー チャネルをそれぞれ表す 3 次元配列です。

配列を介して赤と青のチャンネルを交換できます

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("./source/test.jpg"))
#红色通道
r = im[:,:,0]
#交换红蓝通道并显示
im[:,:,0] = im[:,:,2]
im[:,:,2] = r
imshow(im)
show()


ここではnumpy配列のスライス方法が使用されています。numpyについてはインターネット上にたくさんの情報があるので、ここでは説明しません。詳細に。

実行結果:

Python画像のグレースケール変換と画像配列の操作方法配列に変換するプロセスでは、

データ型

を設定でき、グレースケール画像の画像配列も意味があります:

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("./source/test.jpg").convert('L'),'f')
#输出数组的各维度长度以及类型
print im.shape,im.dtype
#输出坐标100,100的值
print im[100,100]


実行結果:

(600, 500)

float

32110.0
追加パラメータ「f」は、配列のデータ型を浮動小数点数に変換します

グレースケール画像には色情報がないため、形状タプルには2 つの値

*array() 変換の逆の操作は、im = Image.fromarray(im) などの PIL の fromarray() を使用して完了できます

画像配列の簡単な適用 - グレースケール変換:

グレースケール画像:

グレー デジタル画像は、ピクセルごとに 1 つのサンプル色のみを含む画像です。このような画像は通常、最も暗い黒から最も明るい白までの範囲のグレースケールとして表示されます。

次の方法で画像をグレースケールに変換できます:

1. 浮動小数点アルゴリズム: Gray=R*0.3+G*0.59+B*0.11

2. 整数メソッド: Gray=(R*30 +G) *59+B*11)/100

3. シフト方法: グレー =(R*76+G*151+B*28)>>8;

4. 平均方法: グレー= (R+G) +B)/3;

5. 緑のみを取得: Gray=G;

上記のいずれかの方法で Gray を取得した後、元の RGB (R、G、B) に R を追加し、G と B を均等に置き換えます。グレーを使用して新しいカラー RGB (グレー、グレー、グレー) を形成し、元の RGB (R、G、B) を置き換えてグレースケール イメージを作成します。

これまで何度も使用されてきましたが、Python を使用すると、convert('L') を使用してグレースケール画像を取得できます

グレースケール変換:

画像を NumPy 配列オブジェクトに読み込んだ後、それらに対して演算を実行できます。手術。簡単な例は、画像のグレースケール変換です。つまり、0 ~ 255 の間隔 (または 0 ~ 1 の間隔) をそれ自体にマップする関数 f です。

次のプログラムにはいくつかの単純なグレースケール変換があります:


#-*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("./source/test.jpg").convert('L'))
im2 = 255 - im # 对图像进行反相处理
im3 = (100.0/255) * im + 100 # 将图像像素值变换到 100...200 区间
im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像(二次函数变换,使较暗的像素值变得更小)
#2x2显示结果 使用第一个显示原灰度图
subplot(221)
title('f(x) = x')
gray()
imshow(im)
#2x2显示结果 使用第二个显示反相图
subplot(222)
title('f(x) = 255 - x')
gray()
imshow(im2)
#2x2显示结果 使用第三个显示100-200图
subplot(223)
title('f(x) = (100/255)*x + 100')
gray()
imshow(im3)
#2x2显示结果 使用第四个显示二次函数变换图
subplot(224)
title('f(x) =255 *(x/255)^2')
gray()
imshow(im4)
#输出图中的最大和最小像素值
print int(im.min()),int(im.max())
print int(im2.min()),int(im2.max())
print int(im3.min()),int(im3.max())
print int(im4.min()),int(im4.max())
show()


実行結果:

Python画像のグレースケール変換と画像配列の操作方法0 255

0 255

100 200
0

もっとはっきり見えますグレースケール変換の結果、2 番目の画像は反転して表示され、3 番目の画像の暗い部分はより明るくなり、明るい部分はより暗くなります。その値は 100 から 200 の間に制限され、最後の画像がグレースケールを通過します。二次関数変換により、暗いピクセル値がより暗くなります。

結論:

このブログでは、画像配列を使用して Python で画像操作を実行するプロセスを、いくつかの簡単な例を含めて紹介します。配列を通じて、画像の変形、画像分類、画像クラスタリングなどの基礎となるあらゆる数学的操作を画像に対して実行できます。私のブログが皆様のお役に立てれば幸いです~

以上がPython画像のグレースケール変換と画像配列の操作方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。