(1時間4,000円の伴走型ビデオチャット指導も受付中!)
Pythonで巡る画像処理の世界:基礎から実践的なライブラリ活用まで
![]()
【Yuki】
あの……今日はPythonを使った「画像処理」について、一緒に勉強していきましょうか。画像処理と聞くと、少し難しそうに感じるかもしれませんが、Pythonには便利なライブラリがたくさんあるので、初心者の方でも比較的扱いやすい分野だと思います……。
![]()
【Hiroki】
画像処理ですね!SNSのフィルターとか、スマホの顔認識みたいな機能のことですよね?興味はあったんですけど、数学とかが難しそうで少し敬遠していました。
![]()
【Yuki】
確かに、背景には数学的な理論もありますが……まずは「画像をどう操作するか」という楽しさを知るのが一番だと思います。今日は、代表的なライブラリである「Pillow」と「OpenCV」を中心に、画像処理の仕組みをゆっくり解説していきますね。
画像処理の第一歩:デジタル画像が「見える」仕組み
![]()
【Yuki】
まず、コンピュータが画像をどう見ているか、というお話から始めます。デジタル画像は、非常に小さな「点」の集まりでできています。この点をピクセル(画素)と呼びます。
![]()
【Hiroki】
ピクセル……聞いたことがあります。拡大していくと、カクカクした四角い色の塊が見えてくる、あれですよね?
![]()
【Yuki】
そうです。それぞれのピクセルは、色に関する情報を持っています。一般的なカラー画像(RGB形式)では、R(赤)・G(緑)・B(青)の3つの色の組み合わせで、一つのピクセルの色が表現されているんです。それぞれの色は通常、0から255の256段階の値を持っています。
![]()
【Hiroki】
つまり、画像っていうのは「数字の並び」として扱えるということですか?
![]()
【Yuki】
ええ、その通りです。Pythonで画像処理をするということは、この「数字の並び」をプログラムで書き換えたり、計算したりすることなんです。まずは、一番手軽に扱えるPillow(PIL)というライブラリから見ていきましょう。
Pillowライブラリ:直感的な画像操作
![]()
【Yuki】
Pillowは、画像の読み込み、リサイズ、回転、フィルター加工といった、基本的な操作を得意とするライブラリです。Webアプリのサーバー側で画像を加工したりする際にもよく使われます。
![]()
【Hiroki】
まずはPillowを使ってみたいです。どうすれば使えるようになりますか?
![]()
【Yuki】
まずはインストールが必要ですね。ターミナルやコマンドプロンプトで、以下のコマンドを入力してみてください。
pip install Pillow
![]()
【Yuki】
インストールができたら、実際に画像を開いて表示してみましょう。例えば、input.jpgという名前の画像ファイルを読み込むコードはこんな風になります……。
from PIL import Image
# 画像を読み込む
try:
img = Image.open('input.jpg')
# 画像の情報を表示
print(f"サイズ: {img.size}")
print(f"フォーマット: {img.format}")
print(f"モード: {img.mode}") # RGBなど
# 画像を表示
img.show()
except FileNotFoundError:
print("指定したファイルが見つかりませんでした……。")
![]()
【Hiroki】
おっ、画像が表示されました!img.sizeで幅と高さがわかるんですね。これを使って画像をリサイズしたりできるんですか?
![]()
【Yuki】
はい、簡単にできます。例えば、アスペクト比を維持したままサイズを変更したり、特定の角度に回転させたりすることも数行で書けますよ。
# サイズを変更(500x500)
resized_img = img.resize((500, 500))
resized_img.save('resized.jpg')
# 画像を90度回転
rotated_img = img.rotate(90)
rotated_img.save('rotated.jpg')
# グレースケール(白黒)に変換
gray_img = img.convert('L')
gray_img.save('grayscale.jpg')
![]()
【Hiroki】
convert('L')だけで白黒になるんですね。すごくシンプルでわかりやすいです。
![]()
【Yuki】
そうですね。Pillowはインターフェースがシンプルなので、ちょっとした加工には最適だと思います。でも……もう少し高度な、例えば「画像の中から人の顔を探したい」といった場合には、別の強力なライブラリが必要になります。
OpenCV:コンピュータビジョンの強力な味方
![]()
【Yuki】
次に紹介するのは、OpenCV(Open Source Computer Vision Library)です。これは、画像処理だけでなく、動画解析や機械学習を用いた画像認識など、非常に高度なことができるライブラリなんです。
![]()
【Hiroki】
OpenCV……名前は聞いたことがあります。本格的なロボットの目や、自動運転なんかでも使われているんですよね?
![]()
【Yuki】
ええ。非常に多機能で、世界中のエンジニアに使われています。Pythonでもopencv-pythonというパッケージを使えば、簡単にその機能に触れることができます。
pip install opencv-python
![]()
【Yuki】
OpenCVで画像を読み込むときは、一つだけ注意点があります。Pillowとは異なり、色の並びがBGR(青・緑・赤)の順になっているんです。
![]()
【Hiroki】
えっ、RGBじゃないんですか?どうしてそんな順番に……?
![]()
【Yuki】
歴史的な経緯によるものだと言われていますが……最初は少し戸惑うかもしれません。でも、基本的な使い方はPillowに似ています。試しに、画像をぼかしてみましょうか。
import cv2
# 画像を読み込む
img = cv2.imread('input.jpg')
if img is not None:
# ガウシアンブラーで画像をぼかす
# (15, 15)はぼかしの強さです
blurred_img = cv2.GaussianBlur(img, (15, 15), 0)
# 画像を保存
cv2.imwrite('blurred.jpg', blurred_img)
# ウィンドウで表示
cv2.imshow('Blurred Image', blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("画像が読み込めませんでした……。")
![]()
【Hiroki】
おぉ、写真が綺麗にボケました!GaussianBlurって言うんですね。かっこいいです。
![]()
【Yuki】
ふふ、そうですね……。OpenCVでは、こうした数学的なフィルター処理が非常に高速に動作します。他にも、物体の輪郭を抽出する「エッジ検出」なども得意ですよ。
NumPyによる画像データの直接操作
![]()
【Yuki】
ここで少しだけ、一歩踏み込んだお話をしますね。OpenCVで読み込んだ画像データは、実はNumPy(ナンパイ)というライブラリの「多次元配列」として保持されています。
![]()
【Hiroki】
NumPyって、数値計算でよく使われるライブラリですよね?画像がNumPyのデータだということは……。
![]()
【Yuki】
はい。画像データの各ピクセルの値に、直接アクセスして計算できるということです。例えば、画像の左上100x100ピクセルの範囲だけを黒く塗りつぶす、といった操作も、配列の操作として記述できます。
import cv2
import numpy as np
img = cv2.imread('input.jpg')
# NumPyのスライス機能を使って一部を黒(0)にする
# [yの範囲, xの範囲]
img[0:100, 0:100] = 0
cv2.imwrite('modified.jpg', img)
![]()
【Hiroki】
本当だ!画像の一部分が四角く切り取られたみたいに黒くなりました。配列を操作しているだけなのに、画像が書き換わるのはなんだか不思議な感覚です……。
![]()
【Yuki】
そうですね……。でも、この「画像を数字の集まりとして扱う」という感覚が身につくと、AIによる画像認識の仕組みも理解しやすくなるはずです。
画像処理を学ぶメリットと、その先の応用
![]()
【Hiroki】
ここまで聞いてみて、画像処理って思っていたよりも自由度が高いんだなと感じました。でも、これを学んだらどんなことに役立ちますか?
![]()
【Yuki】
実用的な場面はたくさんあります。例えば……
- データサイエンスの前処理: AIに学習させる前に、画像のサイズを揃えたり、ノイズを除去したりします。
- 自動化ツール: 大量の写真から特定の色の部分だけを抽出したり、文字を認識(OCR)したりできます。
- クリエイティブな表現: 独自のフィルターを作ったり、複数の画像を合成してアートを作ったりもできます。
![]()
【Hiroki】
なるほど。最近の生成AIなんかも、こうした画像処理の延長線上にあるのかもしれませんね。
![]()
【Yuki】
そうかもしれません……。もしHirokiくんがもっと深く学びたいと思ったら、まずは身近な困りごとを解決するスクリプトを書いてみるのがいいと思います。「フォルダ内の大量の画像のサイズを一括で変えたい」とか、そんな小さな目的で大丈夫です。
![]()
【Hiroki】
それ、やってみたいです!デジカメで撮った大きな写真を、ブログ用に小さくするのがいつも面倒だったんです。Pillowを使えば自分専用のツールが作れそうですね。
![]()
【Yuki】
いいアイデアだと思います。自分で作ったツールが、誰かの、あるいは自分自身の役に立つのを感じられると……プログラミングがもっと楽しくなるはずですから。
まとめ:自分だけの「画像処理」を始めよう
![]()
【Yuki】
最後に、今日紹介したライブラリの使い分けをまとめておきますね。
- Pillow: リサイズ、回転、切り抜き、Web用画像の生成など、一般的な画像操作に。
- OpenCV: 高度な画像解析、動画処理、物体検出、高度なフィルター処理に。
- NumPy: ピクセル単位での高速な計算や、独自のアルゴリズムの実装に。
![]()
【Hiroki】
使い分けがはっきりしていて分かりやすいです。まずはPillowで画像の一括変換ツールを作るところから始めてみます!
![]()
【Yuki】
応援しています。もし途中でわからなくなったら、公式ドキュメントを見てみると新しい発見があるかもしれません……。
![]()
【Yuki】
あ、あと……画像処理を夢中でやっていると、たまに「色」の数値を見ているだけで時間が過ぎてしまうことがありますけど、休憩も忘れないでくださいね。
![]()
【Hiroki】
はい、気をつけます(笑)。Yukiさん、今日はありがとうございました!
![]()
【Yuki】
……どういたしまして。また、聞きたいことがあればいつでも声をかけてくださいね。
付録:実践的なスクリプト例(画像一括リサイズ)
![]()
【Yuki】
Hirokiくんが作りたいと言っていた「一括リサイズツール」の簡単なサンプルを置いておきます。これを参考に、自分好みにカスタマイズしてみてください。
import os
from PIL import Image
def resize_images(input_dir, output_dir, size=(800, 600)):
# 出力フォルダがなければ作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# フォルダ内のファイルを走査
for filename in os.listdir(input_dir):
if filename.endswith(('.jpg', '.jpeg', '.png')):
img_path = os.path.join(input_dir, filename)
with Image.open(img_path) as img:
# アスペクト比を保ってリサイズ
img.thumbnail(size)
# 保存
save_path = os.path.join(output_dir, filename)
img.save(save_path)
print(f"変換完了: {filename}")
# 実行
# resize_images('input_folder', 'output_folder')
![]()
【Hiroki】
わぁ、ありがとうございます!img.thumbnailを使うと、アスペクト比を勝手に守ってくれるんですね。これなら大切な写真が変に伸びたりしなくて安心です。
![]()
【Yuki】
ええ。こうした小さな工夫が、使いやすいツールにするコツなんです。……それでは、今日の講義はここまでです。お疲れ様でした。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

