OpenCVなしの画像処理| Python

| | | | | | | | | |

OpenCVは画像の操作に広く使用されており、そのためのさまざまな機能を備えています。しかし、OpenCVのような外部ライブラリを使用せずに画像ファイルを処理したい場合はどうでしょうか。その方法を見てみましょう。

画像スケーリング(最近隣内挿法を使用):

最近隣内挿法—これは、補間する最も簡単な方法です。この方法は、単に「最も近い」隣接ピクセルを決定し、その強度の値を取ります。

幅がw、高さが—の小さな画像を考えます。 h p>と仮定して、幅pから幅qに変更したい。 mおよびq> n。ここで、2つのスケーリング定数が必要です。

 scale_x = p / w scale_y = q / h 

ここで、元のピクセルを参照して、出力画像のすべてのピクセルを反復処理します。からコピーしています。 scale_xscale_yを使用して制御変数をスケーリングし、結果のスケーリングされたインデックス値を丸めます。

視覚的表現:
画像は3X3ピクセル(合計9ピクセル)です。画像サイズを6X6に増やしたい場合、最も近い隣接アルゴリズムに従って、6/3(つまり2)ピクセルは値ピクセルと同じRGB値を持つ必要があります。元の画像に変換します。

画像スケーリングプログラム:


#matplotlibとnumpyを使用

import matplotlib.image as img

インポート<コードクラス= "plain"> numpy as npy


#画像の場所を読み取り可能にする

m = img.imread( "taj.png " );


#元の画像の長さを定義する

w 、h = m.shape [: 2 <コードクラス="plain">];


#xNewとyNewは新しい幅で、
#必要な画像の高さ
スケーリング後

xNew = int (w * 1 / 2 );

yNew = int (h * 1 / 2 );


#スケーリング係数を計算します
#2ピクセル以上動作します

xScale = xNew / (w - 1 );

yScale = yNew / (h - 1 );


#numpyを使用し、xNewマトリックスを取得します
#幅と新しい高さwith
#4属性[alpha、B、G、B]値、Äã‚Äã

newImage = npy.zeros([xNew、yNew、 4 ]);


for i in range (xNew - 1 ):

for j in range (yNew - 1 ):

newImage [ i + 1 、j +<コードクラス="値">1<コードクラス="プレーン">]<コードクラス="キーワード">=<コードクラス= "plain"> m [ 1 + int (i / xScale)、

1 + int (j / yScale)]


#スケーリング後に画像を保存

img.imsave( `scaled.png ` 、newImage);

出力:

画像のグレースケール:

平均値の使用値法では、この方法は、RGB値が何で構成されているかを示すのではなく、ピクセルの強度を強調します。平均RGB値を計算し、それにピクセルのRGB値を割り当てると、ピクセルのRGB値は同じであるため、RGBの比率が異なるためにすべての色が生成されるため、色を作成できません。この場合、比率は1:1:1になるため、値。したがって、レンダリングされた画像は灰色の画像のように見えます。

視覚的表現:

グレースケール画像プログラム:


#NumPyを使用

import numpy as npy


#matplotlibを使用

インポート matplotlib.image as img


#統計を使用して平均をインポートします
#平均を計算します

from 統計インポート意味


m = img.imread( "taj.png"


#幅と高さを定義します元の画像

w、h = m .shape [: 2 ]


#ピクセルあたり4つの属性を持つ新しい画像ディメンション

newImage = npy.zeros([w、h、 4 ])

print (w)

print (h)


for i in range (w):

for j in range (h):

#RGB比は0から1の間になります

lst = [ float (m [i] [j] [ 0 ])、 float (m [i] [j] [ 1 ])、 float (m [i] [j] [ 2 ])]

avg = float (mean(lst) )

newImage [i] [j] [ 0 ]<コードクラス="キーワード">=<コードクラス="プレーン">平均

<コードクラス="プレーン">newImage [i] [j] [ 1 ] = avg

newImage [i] [j] [ 2 ] = avg

newImage [i] [j] [ 3 ] = 1 #アルファ値は1


#imsaveで画像を保存

img.imsave ( `grayedImage.png` 、newImage)

< / tbody>

出力:

画像の切り抜き:

切り抜きは基本的に削除されます不要なピクセル。これは、必要なピクセルを画像の別のグリッドに配置することで実行できます。そのサイズは、トリミング後に必要なサイズと一致します。

10√ó10ピクセルのサイズの画像を検討します。 4√ó4ピクセルのサイズの画像の中心のみをトリミングしたい場合は、(3、3)から4ピクセルまでの(10-4)/2からピクセル値を収集する必要があります。 x方向およびy方向に4ピクセル。

視覚的表現:

イメージクロッパー:


#matplotlibとnumpyを使用

import matplotlib.image as img

import numpy as npy


#変数mの画像を読み取る

m = img.imread( "taj.png"


#画像サイズの定義幅(w)高さ(h)

w、h = m.shape [: 2 ]


#トリミング後に必要な画像サイズ

xNew = int (w * 1 / 4

yNew = int (h * 1 / 4

newImage = npy.zeros([xNew、yNew、 4 ])


#印刷幅ソース画像の高さ

印刷<コードクラス="プレーン">(w)

<コードクラス="キーワード">印刷<コードクラス="プレーン" >(h)


for i in 範囲 1 、xNew):

for j in 範囲 1 、yNew):

#元の画像の100から100ピクセルにトリミング

newImage [i、j] = m [ 100 + i、 100 + j]


#画像を保存

img.imsave( `cropped.png` 、newImage)

出力:

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method