AI活用術 仕事

AIでつくる間違い探し即答プログラム

1. Pythonコード

import cv2
import numpy as np
from skimage.metrics import structural_similarity as compare_ssim

# 画像を読み込む
image1 = cv2.imread('image1.png')
image2 = cv2.imread('image2.png')

# 画像サイズの取得
(h1, w1) = image1.shape[:2]
(h2, w2) = image2.shape[:2]

# 画像サイズが異なる場合、2つ目の画像を1つ目の画像のサイズにリサイズ
if (h1, w1) != (h2, w2):
    image2 = cv2.resize(image2, (w1, h1))

# グレースケールに変換
gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# SSIM(構造類似性指数)を計算して、差分を取得
(score, diff) = compare_ssim(gray1, gray2, full=True)
diff = (diff * 255).astype("uint8")

print(f"SSIM: {score}")

# 差分画像を二値化
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

# 輪郭を検出
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# オリジナル画像に差異をハイライト表示
for contour in contours:
    if cv2.contourArea(contour) > 100:  # 小さな違いは無視
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(image1, (x, y), (x + w, y + h), (0, 0, 255), 2)
        cv2.rectangle(image2, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 結果を表示
cv2.imshow("Image 1", image1)
cv2.imshow("Image 2", image2)
cv2.imshow("Diff", diff)
cv2.imshow("Thresh", thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. プログラムの動作説明

  1. 画像サイズの確認:
  • image1image2のサイズを取得し、サイズが異なる場合は、cv2.resizeを使用してimage2image1のサイズにリサイズします。
  1. グレースケール変換と比較:
  • サイズが同じであることを確認した後、両方の画像をグレースケールに変換し、構造類似性指数(SSIM)を計算して差分を取得します。
  1. 差分の二値化と輪郭検出:
  • 差分画像を二値化し、cv2.findContoursを使用して輪郭を検出します。
  1. 違いをハイライト:
  • 差分が見つかった部分に赤い四角を描き、違いを視覚的に強調します。
  1. 結果の表示:
  • 元の画像と差分画像を表示し、どこに違いがあるかを確認できます。

3. 実行時の注意点

  • 画像ファイルのパスは、実際に使用するファイル名に置き換えてください(例: image1.pngimage2.png)。
  • 画像サイズが非常に異なる場合、リサイズ後の比較結果が正確でない可能性があるため、事前に適切なサイズで画像を準備することをお勧めします。

このプログラムは、画像サイズを自動で調整しながら、間違い探しを行う機能を備えています。これにより、異なるサイズの画像でも簡単に比較することが可能になります。

-AI活用術, 仕事

GooDeveLuckをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む