※GIMPを使用した手作業、人力の方が、精度が高い。
未完成のプログラム。この方法は普段は不使用。
実験的な内容になる。
Google Colab AIを使用して、
二つの画像の差分を検出して切り取り、もう片方の画像に貼り付けるプログラムを作成して貰った。
画像の幅と高さを合わせて、ズレが無いことが前提となる。
中国語のコメントは、プログラムの生成と共に作られた。そのコメントの右の文章は、DeepLで翻訳して貰った。
文字化けした場合はコメントは削除して貰ってもいい。
Google Colab AIへの指示文を、以下に示す。
「pythonを使用して、二つの画像の差分を複数、検出して、切り取って、もう片方の画像に貼り付けるプログラムを作成して下さい。」
【環境】
Google Colab AI
Anaconda3
Jupyter Notebook
【使い方】
img1 = cv2.imread(path1)の「path1」の所に、無修正(海外版)の画像のダブルコーテーション有りのパスを入れる。
img2 = cv2.imread(path2)の「path2」の所に、修正有り(日本語版)の画像のダブルコーテーション有りのパスを入れる。
エラーが出る場合は、パスの前に「R」か「r」を打つ。
以下に例を示す。
img1 = cv2.imread(r"C:\Users\user\Desktop\pythoncolab1.jpg")
以下に、プログラムを示す。
import cv2
import numpy as np
# 2つの画像を読む
img1 = cv2.imread(path1)
img2 = cv2.imread(path2)
# 画像をグレースケールに変換する
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 2つの画像の差の絶対値を計算する
diff = cv2.absdiff(gray1, gray2)
# 差分画像の閾値処理
thresh = cv2.threshold(diff, 10, 255, cv2.THRESH_BINARY)[1]
# 閾値処理された画像に対してモルフォロジー演算を行う
kernel = np.ones((5,5),np.uint8)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
# 閾値処理された画像から輪郭を見つける
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# アウトラインの横断
for contour in contours:
# アウトラインのバウンディングボックスを取得
x, y, w, h = cv2.boundingRect(contour)
# アウトラインが十分な大きさであれば、それをカットして別の画像に貼り付けます。
if w > 5 and h > 5:
# 剪切差异
diff_region = img1[y:y+h, x:x+w]
# 差分を別の画像に貼り付ける
img2[y:y+h, x:x+w] = diff_region
cv2.imwrite('res.png', img2)
#
cv2.imshow('Result', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
実験結果


