最新の画像を読み込んで比較する

Posted at 2023 年 06 月 25 日

前回日付とフォルダを指定して画像を保存したので、今回は保存した画像の中で常に最新のファイルを読み込んで設定した画像と保存した画像のヒストグラムを比較します。

環境は下記になります。

Hardware:Raspberry pi4B
OS:Raspbian 10/buster
Python:3.7.3

globモジュールを利用して最新のファイルを読み込みます。
globモジュールを使うことで特定条件のパターンにマッチしたファイルを取得できます。

ソースコードは以下になります。

AllList = glob.glob('./images/*') 
latest_file = max(AllList, key=os.path.getctime)
print(latest_file)


os.path.getctime関数で作成日時を取得し一番更新日時が早いファイルを読み込んでいます。

全体のソースコードは以下になります。
撮影した画像を特定のフォルダに保存し、最新の画像と設定している画像を比較して近い画像なら〇、その他なら×のメッセージボックスを表示させます。
メッセージボックスは過去の記事には含まれていないですが、また別の機会に記事にします。

import tkinter as tk
import os
import time
import datetime
import picamera
import cv2
import glob
from tkinter import messagebox

#ウィンドウの作成
base = tk.Tk()
base.geometry("500x300")
base.title("画像撮影")
camera = picamera.PiCamera()

# 保存先path
image_path = "./images/"

def clk():  #---クリックイベント画像撮影
     
    #現在時間を取得
    now = datetime.datetime.now()
    #画像撮影
    camera.resolution = (1024, 768)
    camera.capture(now.strftime(image_path + '%Y%m%d_%H%M%S') + 'cap.jpg')
    #プレビュー
    camera.start_preview()
    time.sleep(5)
    camera.stop_preview()
     
def com():  #---クリックイベント比較
     
    #最新ファイルの取得
    AllList = glob.glob('./images/*') 
    latest_file = max(AllList, key=os.path.getctime)
    print(latest_file)
       
    # 撮影した画像を読み込む
    img1 = cv2.imread(latest_file)
    color = ('b','g','r')
       
    #ヒストグラム計算
    for i , col in enumerate(color):
      histr1 = cv2.calcHist([img1],[i],None,[256],[0,256])
         
    # 比較元画像を読み込む
    img2 = cv2.imread('Originalcap.jpg')
    color = ('b','g','r')
       
    #ヒストグラム計算
    for i , col in enumerate(color):
      histr2 = cv2.calcHist([img2],[i],None,[256],[0,256])
       
    #ヒストグラムの比較。
    comphist = cv2.compareHist(histr1, histr2, cv2.HISTCMP_CORREL) 
    print(comphist)
     
    #判定
    num = 0.8
    if num < comphist:
      messagebox.showinfo('成否', '○')
    else:
      messagebox.showinfo('成否', '☓')  
     
#ウィジェットの作成
label = tk.Label(text = "ボタンを押して撮影する")
button1 = tk.Button(base, text='開始', width=20, command=clk)
button2 = tk.Button(base, text='比較', width=20, command=com)

# 配置
label.pack()
button1.pack(fill = 'x',padx=20, side = 'left')
button2.pack(fill = 'x',padx=20, side = 'left')

base.mainloop()

DevpediaCode編集部

DevpediaCodeはWeb、AI、Iot、ローコードなどプログラムに関する最新ITテーマの情報を発信するメディアです。

お問合せ下記のURLからお願いします。

https://devpediacode.com/contact