
画像処理の魔法使い、PythonとOpenCVの冒険にご招待します!🧙♂️✨
今回は過去案件にて使用した、実際のソースコードをご紹介します。
お客様からのご依頼は、数百枚のスキャニングした画像データをページに一覧表示したいというものでした。
元画像がスキャニングデータであるため、画像によっては傾きが異なり、本来は1枚ずつチェックし、画像編集ソフトを使って回転させる必要があります。
PythonのOpenCVライブラリを活用することで、画像を自動認識し、傾きを補正することが可能です。
また、リサイズとトリミングを実施し、中央に再配置することで大幅な作業効率化につながります。
ソースコードについては以下になります。
事前にPythonが動作する環境を用意しておきます。
まずは使用するライブラリを読み込みます
import cv2
import os
import numpy as np
画像補正用の命令を記述します
- 出力先のディレクトリがなければ作成
- 入力用ディレクトリに格納した複数の画像を読み込む
- 元画像の共通して不要な部分を削除
- 元画像に共通して含まれる外枠の四角形の角度の修正(10度以内の傾きが対象)
- 画像のリサイズ
- 画像を中央に再配置
def resize_and_center_images(input_folder, output_folder, desired_size):
if not os.path.exists(output_folder):
os.makedirs(output_folder)for filename in os.listdir(input_folder): if filename.endswith((".png", ".jpg", ".jpeg")): img_path = os.path.join(input_folder, filename) img = cv2.imread(img_path) img = img[:, 190:] gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY_INV) contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if contours: cnt = max(contours, key=cv2.contourArea) rect = cv2.minAreaRect(cnt) angle = rect[2] if angle < -10: angle = 90 + angle elif angle > 10: angle = angle - 90 (h, w) = img.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) corrected_img = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) scale = min(desired_size / h, desired_size / w) new_h, new_w = int(h * scale), int(w * scale) resized_img = cv2.resize(corrected_img, (new_w, new_h)) top = (desired_size - new_h) // 2 bottom = desired_size - new_h - top left = (desired_size - new_w) // 2 right = desired_size - new_w - left centered_img = cv2.copyMakeBorder(resized_img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[255, 255, 255]) output_path = os.path.join(output_folder, filename) cv2.imwrite(output_path, centered_img) input_folder = 'pathto/input' output_folder = 'pathto/output' desired_size = 800 resize_and_center_images(input_folder, output_folder, desired_size)
Pythonを利用すれば、大量の画像処理も、画像解析ライブラリを活用して短時間で実施することができます。
他にも同じ操作を繰り返す作業や、データの収集・分析も可能です。
PythonとOpenCVがいかに強力か、そして画像処理の世界がいかに魅力的かを体験してみてください✨
時間を節約し、効率を向上させましょう!🌟

西村 力也
代表取締役
2002年からWeb制作・システム開発に従事。React、Next.js、TypeScriptを中心としたモダンなフロントエンド開発の専門家。AI検索最適化(AIO)の先駆者として、ChatGPT、Perplexity等のAI検索エンジン対応を推進。三重県津市を拠点に、東海地方の企業様のデジタル変革を支援しています。
関連記事

【Step 1詳細版】現状把握の具体的な方法とツール - DX推進の第一歩
前回の記事「なぜ日本企業の93%がDXで成果を出せないのか?確実な業務効率化5ステップ」では、DX成功の5つのステップをご紹介しました。今回は、その第一歩である「Step 1: 現状把握」について、実際に使えるツールと具体的な方法を詳しく解...

2025年、企業が押さえるべきウェブサイト構築トレンド7選
〜広報担当者が知っておくべき最新技術と導入効果〜1. クッキーレス対応AIコンテンツ生成技術概要サードパーティクッキー廃止に対応し、ファーストパーティデータとコンテキスト情報を活用したAIコンテンツ生成システム。ChatGPT APIを統合...

なぜ日本企業の93%がDXで成果を出せないのか?確実な業務効率化5ステップ
衝撃の現実:10社中9社はDXで失敗している「うちの会社もDXを進めなくては…」そう思っている企業は多いでしょう。しかし、実際に成功している企業はどれくらいあるでしょうか?答えは、わずか7%です。アビームコンサルティングの調査によると、年間...