
画像処理の魔法使い、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検索エンジン対応を推進。三重県津市を拠点に、東海地方の企業様のデジタル変革を支援しています。
関連記事

ジオターゲティング広告とは?地域密着型ビジネスの集客を変える最新マーケティング手法
ジオターゲティング広告とは何かをわかりやすく解説。位置情報を活用した集客手法の仕組みやメリット、学習塾・不動産・飲食店・クリニックの成功事例を紹介します。...

FileMakerとRPAを活用した業務自動化PoCを実施しました
近年、多くの企業でDX(デジタルトランスフォーメーション)の推進や業務効率化への取り組みが進んでいます。しかし、日々の業務の中には、依然として手作業によるデータ入力や転記作業が数多く残されているのが現実です。...

非エンジニアでも業務アプリを作れる時代へ — AI内製化研修「NaiseiLAB」をリリース
株式会社エクサソリューションズは、法人向けAI業務アプリ内製化研修サービス「NaiseiLAB(内製ラボ)」を正式リリースいたしました。...