Files
ImgTestSystem/core/Recipe.h
T
yoshikazuandClaude Opus 4.8 e4eca6b303 Initial commit: ノーコード画像検査アプリ (MVP + 追加機能一式)
検査レシピ=処理/検査ステップの縦リスト(配線なし)。yfoxlib(yfoximg/yfoxbase)使用。

- ビジュアル・パイプライン(カード+適用後サムネイル+緑/赤 合否)
- テンプレート/対話式ウィザードでレシピ生成(CTaskDialog)
- パラメータのスライダー・ライブ調整
- レシピ保存/読込(*.itr) + 最近使ったファイル(MRU)
- 検査範囲(ROI)を複数マウス指定(ドラッグ追加/右クリック削除)
- カードのドラッグ並べ替え
- 判定結果画像の保存 + 検査ログCSV(項目拡張)
- 処理6種+検査3種(明るさ/白画素率/塊の数)
- /selftest(実行+レシピ往復+結果画像+複数ROI塊カウント検証)、/demo

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 09:26:10 +09:00

82 lines
2.6 KiB
C++

#pragma once
//
// Recipe.h - ノーコード「検査レシピ」のデータモデル(UI/画像ライブラリ非依存)。
//
// パラダイム: ブロックをワイヤで繋ぐノードグラフではなく、
// 「上から下へ順に実行するステップの縦リスト」= 料理のレシピ / 検査チェックリスト。
// ステップは2種: 処理(画像を加工) と 検査(値を測って範囲判定=PASS/FAIL に寄与)。
//
#include <afx.h>
#include <atltypes.h> // CRect
#include <vector>
namespace core {
// ステップ種別。process=画像加工 / inspect=測定+判定。
enum class StepKind
{
// --- 処理(画像を加工する) ---
Grayscale, // カラー→グレー(24bit→8bit)
Median, // 3x3 メディアン(ノイズ除去)
Binarize, // 二値化(帯 [L,H])
Otsu, // 大津の二値化(自動しきい値)
Gamma, // ガンマ補正
Contrast, // コントラスト伸長
// --- 検査(測定して範囲で合否) ---
InspectBrightness, // 平均輝度が [min,max] に入れば OK
InspectWhiteRatio, // 二値化後の白画素率(%) が [min,max] に入れば OK
InspectBlobCount, // 二値化+ラベリングで「塊(キズ/穴)の数」が [min,max] に入れば OK
};
// 1つのパラメータ(数値)。UI はこの記述を見て入力欄を作る。
struct StepParam
{
CString key; // 内部キー
CString label; // 画面表示名
double value; // 現在値
double lo; // 入力下限(UIヒント)
double hi; // 入力上限(UIヒント)
};
// 実行後の結果(検査ステップのみ意味を持つ)。
struct StepResult
{
bool ran = false; // 実行された
bool ok = true; // 検査OK(処理ステップは常に true)
double measured = 0.0; // 測定値(検査ステップ)
CString text; // 表示用の説明(測定値/エラー等)
};
// レシピの1ステップ。
struct Step
{
StepKind kind;
std::vector<StepParam> params;
StepResult result;
double Param(LPCWSTR key, double def = 0.0) const
{
for (const auto& p : params)
if (p.key == key) return p.value;
return def;
}
void SetParam(LPCWSTR key, double v)
{
for (auto& p : params)
if (p.key == key) { p.value = v; return; }
}
};
// 検査レシピ = ステップの並び + 検査範囲(ROI)。
struct Recipe
{
std::vector<Step> steps;
// 検査範囲(画像ピクセル座標)。空のときは画像全体を検査。複数指定すると各範囲を合算。
// 本アプリの処理ステップは寸法を変えないため、ROI は全ステップで同座標系で有効。
std::vector<CRect> rois;
};
} // namespace core