C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

OpenCVで3

こちらの続きです。
OpenCVで2 - C#ATIA

折角なので、こちらをpython無しwindows環境でも実行出来るように
Exeファイルにしたいと思います。

の前に前回のものを修正します。
折角Exeファイルにするので、ファイルをD&Dで変換するものにしたいですね。

# py
import traceback
import cv2
import numpy as np
import sys
from tkinter import messagebox 
import pathlib

APP_NAME = "D&D Test"

def main(
        path: str,
) -> None:
    """
    指定したパスの画像を読み込み線を細くする(黒線を太くする)
    """
    try:
        # ファイルの有無チェック
        imgPath: pathlib.Path = pathlib.Path(path)
        if not imgPath.exists(): return

        # 読み込み
        try:
            img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        except:
            return

        # カーネルを定義する
        kernel = np.ones((3, 3), np.uint8)

        # 処理
        resImg = cv2.erode(img, kernel, iterations=1)

        # 出力用パス
        expPath: str = imgPath.parent / f"{imgPath.stem}_mod{imgPath.suffix}"

        # 書き出し
        cv2.imwrite(expPath, resImg)
    except:
        messagebox.showerror(
            APP_NAME,
            'Failed:\n{}'.format(traceback.format_exc())
        )


if __name__ == '__main__':

    # # D&D数をチェック
    if len(sys.argv) < 2:
        messagebox.showwarning(APP_NAME, "ファイルをD&Dしてね")
        sys.exit()

    # メインを実行
    # argvは引数でリストです
    # argv[0]は自身のファイルパスで
    main(sys.argv[1])

・・・結構変えちゃいましたね。

ここの部分のsys.argvが実行時の引数で、リストになっています。

    if len(sys.argv) < 2:

sys.argv[0]は実行ファイル自身のファイルパスが入ってくる事に
注意ですね。

こちらでExe化して完了です。
auto-py-to-exe - C#ATIA

***追記です***

ファイルパスに全角文字が含まれていると上手く行かなかったので、
自分はこれで対処しています。
一時的なフォルダ - C#ATIA
D&Dされたファイル(全角文字込みファイルパス)
 ↓
・一時的なフォルダに全角文字を含めないファイル名でコピー
 ↓
OpenCVで処理。処理後の結果も一時的なフォルダに保存
 ↓
・処理後のファイルを目的のフォルダにコピー
 ↓
・終了(一時的なフォルダが勝手に削除される)