PythonとGoogle_Colab_AI作成2

Last-modified: 2024-10-21 (月) 22:46:26

※GIMPを使用した手作業、人力の方が、精度が高い。

未完成のプログラム。この方法は普段は不使用。
実験的な内容になる。

画像一枚を指定するのと、フォルダを指定するのだと、結果が異なった。
精度としては、画像の一枚の方が高い。
画像の幅と高さが大きいと、思うような結果が出ない。
Google Colab AIを使用して、
二つの画像の差分を検出して切り取り、もう片方の画像に貼り付けるプログラムを作成して貰った。
中国語のコメントは、プログラムの生成と共に作られた。そのコメントの右の文章は、DeepLで翻訳して貰った。
無修正版と修正有り版の画像の幅と高さを合わせて、枚数も合わせて、ズレが無いことが前提となる。
読み込む画像の拡張子については、".jpg"にしてある。出力も".jpg"になる。
ファイル名は2桁のゼロ埋めで、"00"から始まる。
画像が出力されるフォルダは、anacondaの環境なら、パイソンのプログラムファイルが有るフォルダに出力される。
Google Colab AIへの指示文を、以下に示す。
「pythonを使用して、二つの画像の差分を複数、検出して、切り取って、もう片方の画像に貼り付けるプログラムを作成して下さい。」

【環境】
Google Colab AI
Anaconda3
Jupyter Notebook

【使い方】
img1 = cv2.imread(path1)の「path1」の所に、無修正(海外版)のフォルダのダブルコーテーション有りのパスを入れる。
img2 = cv2.imread(path2)の「path2」の所に、修正有り(日本語版)のフォルダのダブルコーテーション有りのパスを入れる。
エラーが出る場合は、パスの前に「R」か「r」を打つ。

以下に例を示す。

#具体例
image_list1 = glob.glob(r"C:\Users\user\Desktop\kaigaiban1\*.jpg")
image_list2 = glob.glob(r"C:\Users\user\Desktop\kaigaiban2\*.jpg")

以下に、プログラムを示す。






import cv2
import numpy as np
import glob

#2
image_list1 = glob.glob(path1)
image_list2 = glob.glob(path2)

#全てのファイル数を取得
maxc = len(image_list1)


for i in range(maxc):

    #配列の画像を読み込み
    img1 = cv2.imread(image_list1[i])
    img2 = cv2.imread(image_list2[i])


    #画像をグレースケールに変換する
    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('{0:02d}'.format(i)+'.jpg',img2)


# 显示结果图像
cv2.imshow('Result', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()