- お役立ち記事
- Pythonによる画像処理の基礎と応用実践講座
Pythonによる画像処理の基礎と応用実践講座

目次
Pythonによる画像処理の基礎
Pythonはその豊富なライブラリと使いやすさから、画像処理の分野において非常に強力なツールです。
また、オープンソースであるため、多くのエンジニアが利用し、さまざまな用途に向けた拡張が行われています。
ここでは、Pythonによる画像処理の基礎について解説します。
画像処理とは何か
画像処理とは、デジタル画像を用いて情報を解析したり、視覚的に表現する技術です。
具体的には、画像のノイズ除去、色調補正、エッジ検出などの操作が含まれます。
これにより、画像から得られる情報を活用して、さまざまな応用に役立てることが可能になります。
Pythonの画像処理ライブラリ
Pythonには画像処理に役立つ多くのライブラリがありますが、特に有名なものをいくつか紹介します。
1. **OpenCV**:
OpenCVは、オープンソースのコンピュータビジョンライブラリで、顔認識や物体追跡などの高度な画像処理操作も提供します。
Pythonだけでなく、C++やJavaにも対応しており、多くのプラットフォームで利用可能です。
2. **Pillow**:
Pillowは、Python Imaging Library(PIL)のフォーク版で、画像の開閉や編集に最適です。
JPEG、PNG、BMPなど多数の画像形式をサポートしています。
3. **Scikit-image**:
Scikit-imageは、科学技術・工学分野での利用を目的としている画像処理ライブラリで、機械学習やデータ分析と組み合わせて使われることが多いです。
OpenCVよりも簡単な処理の導入に適しています。
Pythonの画像処理の基本操作
Pythonによる画像処理の基本操作を具体的に見ていきましょう。
画像ファイルの読み込みと表示
まず最初に、OpenCVとPillowを使った画像の読み込みと表示の方法を解説します。
“`python
import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# OpenCVでの画像の読み込み
image = cv2.imread(‘sample.jpg’)
# Pillowでの画像の読み込み
image_pil = Image.open(‘sample.jpg’)
# OpenCVでの画像表示
cv2.imshow(‘Image’, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Pillowでの画像表示
plt.imshow(np.array(image_pil))
plt.show()
“`
この例では、OpenCVとPillowを用いて画像を読み込み、表示しています。
OpenCVは`cv2.imread`を用いて画像を読み込み、`cv2.imshow`で表示します。
一方、Pillowは`Image.open`で画像を読み込み、Matplotlibを使って表示します。
画像の保存
次に、画像処理の結果を保存する方法について説明します。
“`python
# OpenCVでの画像の保存
cv2.imwrite(‘output.jpg’, image)
# Pillowでの画像の保存
image_pil.save(‘output_pil.jpg’)
“`
OpenCVでは`cv2.imwrite`、Pillowでは`save`メソッドを使って画像を保存します。
これにより、画像処理を施した後の結果をファイルとして出力することができます。
画像の変換
画像処理の基本操作のひとつとして、画像のカラー空間変換があります。
ここでは、RGBからグレースケールへの変換を例に解説します。
“`python
# OpenCVでのカラー空間変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Pillowでのカラー空間変換
gray_image_pil = image_pil.convert(‘L’)
gray_image_pil.show()
“`
OpenCVの`cv2.cvtColor`を使って、BGR(OpenCVではデフォルトカラー)からグレースケールに変換します。
Pillowでは、`convert`メソッドを用いて同様の変換が可能です。
Pythonによる画像処理の応用
画像処理の基礎を理解したところで、より高度な応用技術についても触れていきます。
エッジ検出
エッジ検出は、画像の輪郭や形状を抽出するために用いられます。
Cannyエッジ検出器を使うことで、これを実現できます。
“`python
# Cannyエッジ検出を用いたエッジ検出
edges = cv2.Canny(gray_image, 100, 200)
# エッジをMatplotlibで表示
plt.imshow(edges, cmap=’gray’)
plt.title(‘Edge Image’)
plt.show()
“`
Cannyエッジ検出器は、入力画像のエッジをコントラストの高い部分として抽出します。
ハイパーパラメータを調整することで、エッジの抽出精度を最適化することが可能です。
画像のフィルタリング
画像フィルタリングを用いることで、ノイズ除去やシャープ化を行うことができます。
ここでは、ガウシアンフィルタを用いたノイズ除去を例に挙げます。
“`python
# ガウシアンフィルタによるノイズ除去
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# フィルタリング結果を表示
plt.imshow(cv2.cvtColor(blurred_image, cv2.COLOR_BGR2RGB))
plt.title(‘Blurred Image’)
plt.show()
“`
ガウシアンフィルタは、画像の平滑化を行い、ノイズを低減します。
フィルタサイズや標準偏差を設定することで、適用範囲や強度を調整することができます。
機械学習との連携
近年、画像処理と機械学習技術の連携が進んでいます。
特にディープラーニングを用いると、物体認識や画像分類の精度が大幅に向上します。
たとえば、TensorFlowやPyTorchなどのディープラーニングフレームワークを用いて、画像データセットをモデルで学習することで、特定の対象を識別することが可能です。
“`python
# TensorFlowを用いた画像分類の例(概念)
import tensorflow as tf
model = tf.keras.models.load_model(‘path_to_model.h5’)
image_array = np.array(image).reshape((1, 224, 224, 3))
predictions = model.predict(image_array)
print(‘Predicted Class:’, np.argmax(predictions))
“`
このように、画像処理と機械学習を組み合わせることで、製造業における自動検知や品質管理プロセスをさらに最適化できます。
まとめ
Pythonを用いた画像処理では、基本的な操作から高度な応用まで、さまざまな技術を簡単に扱えることがわかりました。
製造業においてこれらの技術を活用することで、工程の効率化や品質の向上が期待できます。
Pythonの画像処理技術を活用し、新しい地平を開拓していきましょう。
資料ダウンロード
QCD管理受発注クラウド「newji」は、受発注部門で必要なQCD管理全てを備えた、現場特化型兼クラウド型の今世紀最高の受発注管理システムとなります。
NEWJI DX
製造業に特化したデジタルトランスフォーメーション(DX)の実現を目指す請負開発型のコンサルティングサービスです。AI、iPaaS、および先端の技術を駆使して、製造プロセスの効率化、業務効率化、チームワーク強化、コスト削減、品質向上を実現します。このサービスは、製造業の課題を深く理解し、それに対する最適なデジタルソリューションを提供することで、企業が持続的な成長とイノベーションを達成できるようサポートします。
製造業ニュース解説
製造業、主に購買・調達部門にお勤めの方々に向けた情報を配信しております。
新任の方やベテランの方、管理職を対象とした幅広いコンテンツをご用意しております。
お問い合わせ
コストダウンが利益に直結する術だと理解していても、なかなか前に進めることができない状況。そんな時は、newjiのコストダウン自動化機能で大きく利益貢献しよう!
(β版非公開)